当前位置: 首页 > 科技观察

Bash初学者系列4:在bash中使用数组

时间:2023-03-14 23:21:53 科技观察

在之前的文章中,我们介绍了如何在bash中使用有限数量的变量,比如保存一个或两个文件名或用户名。但是,如果您的bash脚本中需要多个变量怎么办?假设我们要创建一个从用户那里读取100个不同输入的bash脚本,是否需要创建100个变量?肯定不行,我们需要用到数组。在bash脚本中创建第一个数组假设我们要创建一个名为timestamp.sh的脚本来更新5个不同文件的时间戳。第一种使用更原始的方法,创建5个不同的变量,如下所示:#!/bin/bashfile1="f1.txt"file2="f2.txt"file3="f3.txt"file4="f4.txt"file5="f5.txt"touch$file1touch$file2touch$file3touch$file4touch$file5可以看到这个方法写起来比较麻烦,我们也可以用另一种方法创建一个包含所有文件名的数组,语法如下:array_name=(value1value2value3…)这样比较简洁,所以我们使用数组的方式,如下:files=("f1.txt""f2.txt""f3.txt""f4.txt""f5.txt")在bash中访问数组元素与大多数编程语言一样,数组中的元素索引从0开始,因此要访问数组中的第n个元素,其下标索引应为[n-1]。例如,要打印数组中的第二个元素,可以参考下面的方法:echo${files[1]}下面的bash脚本reverse.sh会倒序打印数组中的5个元素:#!/bin/bashfiles=("f1.txt""f2.txt""f3.txt""f4.txt""f5.txt")echo${files[4]}echo${files[3]}echo${files[2]}echo${files[1]}echo${files[0]}用过bash的朋友可能会奇怪为什么我用这么多echo命令而不是循环。后面要介绍bash中循环的使用。也可以一次打印出所有数组元素:echo${files[*]}f1.txtf2.txtf3.txtf4.txtf5.txt可以打印数组元素总数,也就是数组的大小array:echo${#files[@]}5可以改变数组中元素的值。例如,我们可以通过以下方式将数组中第一个元素的值更改为a.txt:files[0]="a.txt"要将元素添加到数组中,我们首先创建一个包含Linux版本的数组names:distros=("Ubuntu""RedHat""Fedora")上面的数组包含三个元素。可以使用+=运算符将元素添加(附加)到数组的末尾,如下所示:distros+=("Kali")现在,数组中已经有4个元素,Kali是最后一个:删除array我们首先创建一个包含5个数字的数组,其名称为num:num=(12345)您可以打印数组中的元素:echo${num[*]}12345我们可以使用shell内置函数unset删除数组中的第三个元素:unset现在,让我们再次打印num数组中的元素:echo${num[*]}1245从上面的结果可以看出,第三个元素被删除delete。也可以使用同样的方法删除数组中的所有元素:unset创建不同数据类型的混合数组与其他编程语言不同,在bash中,你可以创建包含不同数据类型的数组,如下面的user.sh所示:#!/bin/bashuser=("john"122"sudo,developers""bash")echo"用户名:${user[0]}"echo"用户ID:${user[1]}"echo"用户组:${user[2]}"echo"UserShell:${user[3]}"上面脚本中的数组包含四个元素,第二个元素是整数数据类型,其余三个元素是字符串。以上就是本次分享的全部内容,欢迎讨论。