Shell 中的数组比较

ShellShellBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何在 Shell 脚本中比较数组。数组是用于存储多个值的有用数据结构,而比较它们是编程中的常见任务。你将使用三个数组,并开发一个脚本来找出它们之间的共同元素。这个过程将帮助你理解 Shell 脚本中的数组操作、循环和条件语句。

创建脚本文件

首先,让我们为脚本创建一个新文件。

  1. 在 WebIDE 中打开终端。你应该会看到一个以 $ 符号结尾的命令提示符。

  2. 导航到项目目录:

cd ~/project

该命令将你的当前目录更改为项目文件夹。~ 符号代表你的主目录,而 /project 是其中的一个子文件夹。

  1. 创建一个名为 array-comparison.sh 的新文件:
touch array-comparison.sh

touch 命令用于创建一个空文件。如果文件已经存在,它会更新文件的时间戳而不修改其内容。

  1. 在 WebIDE 编辑器中打开该文件。你可以通过点击 WebIDE 界面左侧文件资源管理器中的文件名来完成此操作。

添加 shebang 并初始化数组

现在,让我们通过添加 shebang 并初始化数组来开始编写脚本。

  1. 将以下内容添加到 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 脚本都至关重要。
  • 然后我们初始化了三个数组:abc。在 Bash 中,数组通过将元素括在圆括号 () 中并用空格分隔来定义。
  • 每个数组包含不同的整数值。我们将使用这些数组来查找共同的元素。

实现第一个比较循环

让我们实现第一个比较循环,以查找数组 ab 之间的共同元素。

将以下代码添加到你的脚本中:

## 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[@]}" 遍历我们在 ab 之间找到的共同元素,这些元素存储在数组 z 中。
  • 我们将 c 中的元素与 z 中的元素进行比较,如果匹配,则将其添加到数组 j 中。
  • 最后,我们打印所有三个数组之间的共同元素。

使脚本可执行并运行它

现在我们已经完成了脚本的编写,接下来让我们使其可执行并运行它。

  1. 在终端中,使脚本可执行:
chmod +x ~/project/array-comparison.sh

chmod 命令用于更改文件的权限。+x 选项添加可执行权限,允许你运行脚本。

  1. 运行脚本:
~/project/array-comparison.sh

该命令执行你的脚本。~/project/ 部分指定了脚本的路径。

你应该会看到类似以下的输出:

Common elements between a and b: 5 6
Common elements among a, b, and c: 5

此输出表明:

  • 数组 ab 之间的共同元素是 5 和 6。
  • 所有三个数组(abc)之间的共同元素是 5。

如果你没有看到此输出或遇到错误,请仔细检查脚本中是否有拼写错误或遗漏的部分。

总结

在本实验中,你学习了如何在 Shell 脚本中比较数组。你创建了一个脚本,使用嵌套循环和条件语句来查找三个数组之间的共同元素。这个练习展示了 Shell 脚本中的关键概念,包括:

  1. 创建和初始化数组
  2. 使用嵌套循环比较数组元素
  3. 使用条件语句检查相等性
  4. 动态地向数组中添加元素
  5. 使脚本可执行并运行它

这些技能是 Shell 脚本的基础,可以应用于未来更复杂的数据处理任务。随着你继续使用 Shell 脚本,你会发现数组操作是高效处理数据集的强大工具。

记住,练习是掌握这些概念的关键。尝试修改脚本以处理不同的数组,或查找唯一元素而不是共同元素。祝你编写脚本愉快!