Shell脚本中的数组
了解如何在Shell脚本中使用数组将帮助您以更高效的方式处理更大的数据集。但是什么是数组,如何创建数组呢?让我们来了解一下吧!
数组是什么?
如果你已经对任何编程语言有基本的了解,那么你就知道数组是什么。但是对于未经训练的人来说,让我们来讲解一下数组的基础知识,并学习如何使用它们。
变量存储单一数据元素。而数组则可以存储几乎无限数量的数据元素。当处理大量数据时,变量可能效率较低,因此使用数组非常有帮助。
我们来学习如何在 shell 脚本中创建数组。
在Shell脚本中创建数组
在shell脚本中,我们可以使用两种类型的数组来进行操作。
- Indexed Arrays – Store elements with an index starting from 0
- Associative Arrays – Store elements in key-value pairs
创建的默认数组是一个索引数组。如果您指定索引名称,它将成为一个关联数组,并且可以通过索引名称而不是数字访问元素。
声明数组:
root@ubuntu:~# declare -A assoc_array
root@ubuntu:~# assoc_array[key]=value
OR
root@ubuntu:~# declare -a indexed_array
root@ubuntu:~# indexed_array[0]=value
注意大写和小写字母a。大写A用于声明关联数组,而小写a用于声明索引数组。
“声明关键字用于显式声明数组,但你实际上不需要使用它们。当你创建一个数组时,你可以根据所需的数组类型简单地初始化值,而无需明确声明数组。”
在Shell脚本中使用数组进行操作
既然你已经知道如何创建数组,那我们就来学习如何处理数组吧。由于数组是一组数据元素的集合,我们可以同时使用循环和数组来提取所需的数据点。
1. 单独访问数组元素
既然我们知道每个数据点都被单独索引,我们可以通过指定数组索引来访问所有数组元素,如下所示:
assoc_array[element1]="Hello World"
echo ${assoc_array[element1]}
同样地,让我们访问一些索引数组的元素。我们可以通过用空格分隔来指定索引数组的所有元素,因为每个元素的索引是自动生成的。
index_array=(1 2 3 4 5 6)
echo ${index_array[0]}
从你可以看到的,第一个元素是根据索引0自动打印的。
2. 依次读取数组元素
如果你已经了解for循环,这将是一个简单的任务。如果你不了解,我们将在以后的教程中进行讲解。我们将使用while或for循环来遍历数组元素的脚本。复制下面的脚本并将其保存为
#!/bin/bash
index_array=(1 2 3 4 5 6 7 8 9 0)
for i in ${index_array[@]}
do
echo $i
done
以上的脚本将输出以下内容:
现在你可能已经注意到了index_array[@],如果你想知道@符号的作用,我们将立即解释一下。
在Shell脚本中为数组提供内置操作功能。
既然你已经学会了如何逐个访问元素并使用for循环,那么我们现在来学习默认可用的数组操作。
1. 访问数组的所有元素
我们学习了通过提供数组的索引或键来访问元素。但是若我们想要同时打印或处理所有元素,可以使用另一个操作符,即[@]符号。
正如你在上面的例子中注意到的那样,当我想要使用for循环遍历所有数组元素时,我使用了这个符号。
echo ${assoc_array[@]}
以上代码将打印出储存在关联数组中的所有元素。
2. 计算数组中元素的数量
类似于上方的@符号,我们有#符号,可以添加在数组名称前面,以提供数组中存储的元素数量。让我们来看看它是如何工作的。
echo ${#index_array[@]}
如果您想计算特定元素使用的字符数,我们可以用索引替换@符号即可。
删除单个数组元素
我们知道如何添加数组元素并打印它们。让我们学习如何删除特定元素。为此,我们将使用unset关键字。
unset index_array[1]
替换上述代码示例中的数组名称和索引ID,就可以删除你想要的数组元素。很简单吧?
结论
用合适的人写脚本,Shell脚本非常广泛,可以替代终端上的任何功能。Shell脚本中数组的一些额外功能还包括能够与正则表达式一起使用。我们可以使用不同的正则表达式来操作Shell脚本中的数组元素。
目前,我们希望您能够对创建和使用数组有一个很好的理解,并能够在您的脚本中使用数组。请在下方发表评论,让我们知道您的想法,以及如果您对这个话题有任何问题。