Shell 脚本中的数组

了解如何在外壳脚本中使用数组将帮助您以更高效的方式处理更大的数据集。但是什么是数组,如何创建数组呢?让我们来看看吧!

什么是数组?

如果您已经对任何编程语言有了基本的了解,那么您就知道什么是数组。但对于初学者来说,让我们回顾一下数组的基础知识,并学习如何使用它们。

变量存储单个数据元素。另一方面,数组可以存储几乎无限数量的数据元素。在处理大量数据时,变量可能会被证明效率非常低,这对实际操作数组非常有帮助。

让我们学习如何在外壳脚本中创建数组。

在Shell脚本中创建数组

在shell脚本中,我们可以使用两种类型的数组。

  • 索引数组 -存储索引从0开始的元素
  • 关联数组 -以键-值对存储元素

创建的默认数组是索引数组。如果指定索引名,它将成为关联数组,并且可以使用索引名而不是数字来访问元素。

声明数组:

1root@ubuntu:~# declare -A assoc_array
2root@ubuntu:~# assoc_array[key]=value
3OR
4root@ubuntu:~# declare -a indexed_array
5root@ubuntu:~# indexed_array[0]=value

请注意大小写字母a 。大写A用于声明关联数组,小写a用于声明索引数组。

decre关键字用于显式声明数组,但实际上并不需要使用它们。在创建数组时,只需根据所需的数组类型初始化值,而无需显式声明数组。

在Shell脚本中使用数组

现在您知道了如何创建数组,接下来让我们学习如何使用数组。因为这些是数据元素的集合,所以我们可以同时使用循环和数组来提取所需的数据点。

1.单独访问数组元素

因为我们知道每个数据点都是单独索引的,所以我们可以通过指定数组索引来访问所有数组元素,如下所示:

1assoc_array[element1]="Hello World"
2echo ${assoc_array[element1]}

外壳Script

类似地,让我们访问一些索引数组元素。我们可以通过用空格分隔来指定索引数组的所有元素,因为索引是为每个元素自动生成的。

1index_array=(1 2 3 4 5 6)
2echo ${index_array[0]}

外壳Scripts

正如您所看到的,第一个元素是基于索引0自动打印的。

2.按顺序读取数组元素

如果您已经知道for循环,这将是一项简单的任务。如果您不这样做,我们将在以后的教程中介绍它们。我们将在Shell脚本中使用WHILE或FOR循环来遍历数组元素。复制以下脚本并将其另存为_<文件名>.sh_

1#!/bin/bash
2index_array=(1 2 3 4 5 6 7 8 9 0)
3
4for i in ${index_array[@]}
5do
6        echo $i
7done

上述脚本将输出以下内容:

循环外壳Scripts

现在您可能已经注意到INDEX_ARRAY[@] ,如果您想知道** @** 符号是用来做什么的,我们现在就来回顾一下。

Shell脚本中数组的内置操作

现在您已经了解了如何单独访问元素和使用for循环,接下来让我们学习默认情况下可用于数组的不同操作。

1.访问数组的所有元素

我们学习了如何通过提供数组的索引或键来访问元素。但如果我们想要同时打印所有元素或处理所有元素,我们可以使用另一个运算符,即`[@]‘符号。

正如您在上面的示例中注意到的,当我想要使用for循环遍历所有数组元素时,我使用了这个符号。

1echo ${assoc_array[@]}

上面的代码将打印存储在assoc数组中的所有元素。

2.统计数组中的元素数

与上面的@符号类似,我们有# 符号,它可以作为数组名称的前缀,为我们提供存储在数组中的元素的计数。让我们看看它是如何工作的。

1echo ${#index_array[@]}

如果您想统计某个元素使用的字符数,我们只需将@符号替换为索引即可。

3.删除单个数组元素

我们知道如何添加数组元素并打印它们。让我们学习如何删除特定元素。为此,我们将使用unset关键字。

1unset index_array[1]

替换上面代码示例中的数组名称和索引ID,您已经删除了所需的数组元素。很简单,不是吗?

结论

Shell脚本非常庞大,可以替换您可以在终端上执行的任何功能,并由合适的人编写脚本。shell脚本中数组的一些附加功能还包括能够使用 regex (正则表达式)。我们可以使用各种正则表达式来操作shell脚本中的数组元素。

目前,我们希望您对创建和使用数组有很好的了解,并能够在脚本中使用数组。在下面发表评论,让我们知道你的想法,如果你有任何关于这个话题的问题。

Published At
Categories with 技术
Tagged with
comments powered by Disqus