介绍
在本实验中,你将学习如何在 Shell 脚本中比较数组。数组是存储多个值的有用数据结构,而比较数组是编程中的常见任务。你将操作三个数组,并开发一个脚本来找出它们之间的共同元素。这个过程将帮助你理解 Shell 脚本中的数组操作、循环和条件语句。
创建脚本文件
首先,让我们为脚本创建一个新文件。
在 WebIDE 中打开终端。你应该看到一个以
$符号结尾的命令提示符。切换到项目目录:
cd ~/project
此命令将当前目录更改为项目文件夹。~ 符号代表你的家目录,而 /project 是其中的一个子文件夹。
- 创建一个名为
array-comparison.sh的新文件:
touch array-comparison.sh
touch 命令用于创建一个空文件。如果文件已经存在,它会更新文件的时间戳而不修改其内容。
- 在 WebIDE 编辑器中打开该文件。你可以通过点击 WebIDE 界面左侧文件浏览器中的文件名来完成此操作。
添加 Shebang 并初始化数组
现在,让我们开始编写脚本,添加 Shebang 并初始化数组。
- 将以下内容添加到
array-comparison.sh中:
#!/bin/bash
## Initialize the arrays
a=(3 5 8 10 6)
b=(6 5 4 12)
c=(14 7 5 7)
让我们来分析一下这段代码:
- 第一行
#!/bin/bash被称为 Shebang。它告诉系统使用 Bash 解释器来运行此脚本。这一行对于任何 Shell 脚本都至关重要。 - 随后我们初始化了三个数组:
a、b和c。在 Bash 中,数组通过将元素括在圆括号()中并用空格分隔来定义。 - 每个数组包含不同的整数值。我们将使用这些数组来查找共同元素。
实现第一个比较循环
让我们实现第一个比较循环,以找出数组 a 和 b 之间的共同元素。
将以下代码添加到你的脚本中:
## Initialize an array to store common elements between a and b
z=()
## Compare arrays a and b
for x in "${a[@]}"; do
for y in "${b[@]}"; do
if [ $x = $y ]; then
z+=($x)
fi
done
done
echo "Common elements between a and b: ${z[@]}"
让我们详细解释一下这段代码:
z=()初始化了一个空数组z,用于存储共同元素。for x in "${a[@]}"是一个循环,它遍历数组a中的每个元素。"${a[@]}"语法会展开为数组的所有元素。- 接着我们有一个嵌套循环
for y in "${b[@]}",它遍历数组b中的每个元素。 if [ $x = $y ]检查来自a的当前元素是否等于来自b的当前元素。- 如果它们相等,我们就使用
z+=($x)将该元素添加到数组z中。 - 最后,我们使用
echo "Common elements between a and b: ${z[@]}"打印共同元素。${z[@]}语法会展开为数组z的所有元素。
实现第二个比较循环
现在,让我们实现第二个比较循环,以找出数组 c 与之前在数组 z 中找到的共同元素之间的交集。
将以下代码添加到你的脚本中:
## Initialize an array to store common elements among a, b, and c
j=()
## Compare array c with the common elements found in z
for i in "${c[@]}"; do
for k in "${z[@]}"; do
if [ $i = $k ]; then
j+=($i)
fi
done
done
echo "Common elements among a, b, and c: ${j[@]}"
这段代码与之前的循环类似,但有几处关键区别:
- 我们初始化了一个新的空数组
j来存储最终的共同元素。 - 外层循环
for i in "${c[@]}"遍历数组c中的元素。 - 内层循环
for k in "${z[@]}"遍历我们在a和b之间找到的共同元素(存储在数组z中)。 - 我们将
c中的元素与z中的元素进行比较,如果匹配,就将其添加到数组j中。 - 最后,我们打印出所有三个数组中的共同元素。
使脚本可执行并运行它
现在我们已经完成了脚本,让我们使其变为可执行文件并运行它。
- 在终端中,使脚本具有可执行权限:
chmod +x ~/project/array-comparison.sh
chmod 命令用于更改文件的权限。+x 选项添加了执行权限,允许你运行该脚本。
- 运行脚本:
~/project/array-comparison.sh
此命令执行你的脚本。~/project/ 部分指定了脚本的路径。
你应该会看到类似以下的输出:
Common elements between a and b: 5 6
Common elements among a, b, and c: 5
该输出表明:
- 数组
a和b之间的共同元素是 5 和 6。 - 所有三个数组(
a、b和c)之间的共同元素是 5。
如果你没有看到此输出或遇到错误,请仔细检查脚本中是否有拼写错误或遗漏的部分。
总结
在本实验中,你学习了如何在 Shell 脚本中比较数组。你创建了一个脚本,利用嵌套循环和条件语句在三个数组中查找共同元素。通过这个练习,你掌握了 Shell 脚本中的核心概念,包括:
- 创建并初始化数组
- 使用嵌套循环比较数组元素
- 使用条件语句检查相等性
- 动态地向数组添加元素
- 使脚本具有可执行权限并运行它
这些技能是 Shell 脚本编程的基础,将来可以应用于更复杂的数据处理任务。随着你继续深入学习 Shell 脚本,你会发现数组操作是高效处理数据集的强大工具。
请记住,实践是掌握这些概念的关键。尝试修改脚本以处理不同的数组,或者尝试找出唯一元素而不是共同元素。祝你脚本编写愉快!



