Unix / Linux - 使用 Shell 数组

你好,有抱负的程序设计师!欢迎来到我们关于在 Unix 和 Linux Shell 脚本中使用数组的课程。我很高兴能引导你进入数据结构世界的这段激动人心的旅程。作为一个教计算机科学多年的老师,我可以向你保证,掌握数组将在你的编程冒险中打开一个全新的可能性领域。那么,让我们跳进去吧!

Unix / Linux - Using Arrays

数组是什么?

在我们深入了解细节之前,让我们先了解数组是什么。想象你有一堆水果,而不是让它们在厨房里到处乱放,你决定把它们放在一个漂亮、有序的水果篮里。这在编程中基本上就是数组的作用——一个容器,用来整齐地存放多个相同类型的项,方便访问。

定义数组值

在 Unix/Linux Shell 脚本中,定义数组非常简单。让我们从一个简单的例子开始:

fruits=("apple" "banana" "cherry" "date")

在这里,我们创建了一个名为 fruits 的数组,包含四个元素。就像我们的虚拟水果篮!每个元素都是一个独立的字符串,用引号括起来,并用空格分隔。

但等等,还有更多!你也可以逐个元素地定义数组:

vegetables[0]="carrot"
vegetables[1]="broccoli"
vegetables[2]="spinach"

在这种情况下,我们正在手动指定每个元素的索引(位置)。记住,在大多数编程语言中,包括 Shell 脚本,数组索引从 0 开始,而不是 1。这是一个经常让初学者绊脚的细节,所以请记住这一点!

记忆数组索引的有趣方法

我经常告诉我的学生,想象他们在一个比赛中。站在起跑线上的人不是编号 1 —— 他们是编号 0!这有点奇怪,但它帮助记住数组从索引 0 开始。

访问数组值

现在我们已经装满了虚拟篮子,我们怎么取出物品呢?让我们来探索!

访问单个元素

要访问特定的元素,我们使用它的索引:

echo ${fruits[2]}

这个命令将输出:cherry

为什么?因为 cherry 在索引 2(记住,我们从 0 开始计数)。

访问所有元素

如果我们想一次看到所有的水果呢?我们可以使用 @ 符号:

echo ${fruits[@]}

这将显示:apple banana cherry date

访问数组长度

你想知道数组中有多少项吗?以下是如何找出:

echo ${#fruits[@]}

这将输出:4

在数组名称前的 # 符号给我们提供了数组的长度。

实际示例

让我们通过一些现实世界的例子来运用我们的知识!

示例 1:向多个用户问候

users=("Alice" "Bob" "Charlie")
for user in "${users[@]}"
do
echo "Hello, $user!"
done

这个脚本将输出:

Hello, Alice!
Hello, Bob!
Hello, Charlie!

在这里,我们使用一个 for 循环来遍历我们的数组,并逐个问候每个用户。就像拥有一个永远不会忘记说你好的人工智能机器人!

示例 2:计算总文件大小

files=("document.txt" "image.jpg" "script.sh")
total_size=0
for file in "${files[@]}"
do
size=$(stat -f%z "$file")
total_size=$((total_size + size))
done
echo "Total size of files: $total_size bytes"

这个脚本计算多个文件的总大小。当你需要快速汇总文件大小而无需手动相加时,这特别有用。

高级数组技术

现在我们已经覆盖了基础知识,让我们探索一些更高级的技术!

切片数组

你可以使用切片来提取数组的一部分:

colors=("red" "green" "blue" "yellow" "purple")
echo ${colors[@]:1:3}

这将输出:green blue yellow

在这里,1:3 意味着 "从索引 1 开始并给我 3 个元素"。

向数组添加元素

你可以向现有数组追加元素:

fruits+=("elderberry")
echo ${fruits[@]}

现在这将包括 "elderberry" 在我们水果数组的末尾。

从数组中移除元素

移除元素有点棘手。我们可以使用 unset 命令:

unset fruits[1]
echo ${fruits[@]}

这将从我们的水果数组中移除第二个元素(记住,索引 1)。

常见的数组方法

以下是在 Unix/Linux Shell 脚本中一些常见的数组操作的总结:

操作 语法 描述
定义数组 array=("elem1" "elem2" "elem3") 创建一个新数组
访问元素 ${array[index]} 获取指定索引的元素
访问所有元素 ${array[@]} 获取所有元素
数组长度 ${#array[@]} 返回元素数量
添加元素 array+=("new_elem") 向数组追加新元素
移除元素 unset array[index] 移除指定索引的元素
切片数组 ${array[@]:start:count} 提取数组的一部分

结论

恭喜!你已经迈出了进入 Unix/Linux Shell 脚本中数组世界的第一步。我们覆盖了定义数组、访问它们的值,甚至一些高级技术。记住,熟能生巧,所以不要犹豫在您自己的脚本中尝试这些概念。

数组是非常灵活的工具,可以简化许多编程任务。无论你是管理用户列表、处理多个文件还是组织数据,数组都将是你在编码旅途中可靠的伙伴。

在我们结束之前,我想起了一句著名计算机科学家 Alan Kay 的话:“简单的事情应该是简单的,复杂的事情应该是可能的。” 数组完美地体现了这一原则——它们简单易用,同时又打开了复杂可能性的世界。

继续编码,继续探索,最重要的是,享受使用数组!它们不仅仅是数据结构;它们是你未来编程杰作的构建块。下次见,快乐编程!

Credits: Image by storyset