[*]阵列来救援!
[*]到目前为止,您已经使用了有限数量的变量 bash 脚本,您创建了几个变量来保存一两个文件名和用户名。
[*]但是,如果您需要在您的 bash 脚本; 假设您要创建一个 bash 从用户读取一百个不同输入的脚本,你要创建 100 个变量吗?
[*]幸运的是,您不需要这样做,因为数组提供了更好的解决方案。
在 a 中创建您的第一个数组 bash 脚本
[*]假设您要创建一个 bash 脚本 时间戳.sh 更新五个不同文件的时间戳。
[*]首先,使用使用五个不同变量的简单方法:
#!/bin/bash
file1="f1.txt"
file2="f2.txt"
file3="f3.txt"
file4="f4.txt"
file5="f5.txt"
touch $file1
touch $file2
touch $file3
touch $file4
touch $file5
[*]现在,不是使用五个变量来存储五个文件名的值,而是创建一个包含所有文件名的数组,这里是数组的一般语法 bash:
array_name=(value1 value2 value3 … )
[*]所以现在你可以创建一个名为 files 的数组来存储你在 时间戳.sh 脚本如下:
files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")
[*]如您所见,这更加简洁和高效,因为您只用一个数组替换了五个变量!
访问数组元素 bash
[*]数组的第一个元素从索引开始 0
因此要访问数组的第 n 个元素,请使用 n -1
指数。
[*]为了 example要打印 files 数组的第二个元素的值,可以使用以下 echo 语句:
echo ${files[1]}
[*]并打印文件数组的第三个元素的值,您可以使用:
echo ${files[2]}
[*]等等。
[*]以下 bash 脚本 反向.sh 将以相反的顺序打印出文件数组中的所有五个值,从最后一个数组元素开始:
#!/bin/bash
files=("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]}
[*]我知道你可能想知道为什么有这么多的 echo 语句,为什么我不在这里使用循环。 这是因为 我打算介绍 bash 本系列后面的循环概念.
[*]您还可以一次打印出所有数组元素:
echo ${files[*]}
f1.txt f2.txt f3.txt f4.txt f5.txt
[*]您可以打印文件数组元素的总数,即 数组的大小:
echo ${#files[@]}
5
[*]您还可以更新数组中任何元素的值; 为了 example,您可以使用以下赋值将 files 数组的第一个元素的值更改为“a.txt”:
files[0]="a.txt"
添加数组元素 bash
[*]让我们创建一个包含流行 Linux 发行版名称的数组:
distros=("Ubuntu" "Red Hat" "Fedora")
[*]distros 数组当前包含三个元素。 您可以使用 +=
运算符将元素添加(附加)到数组的末尾。
[*]为了 example,您可以将 Kali 附加到 distros 数组,如下所示:
distros+=("Kali")
[*]现在 distros 数组正好包含四个数组元素,而 Kali 是数组的最后一个元素。
删除数组元素 bash
[*]让我们首先创建一个 num 数组来存储从 1 到 5 的数字:
num=(1 2 3 4 5)
[*]您可以打印 num 数组中的所有值:
echo ${num[*]}
1 2 3 4 5
[*]您可以使用删除 num 数组的第三个元素 unset
内置外壳:
unset num[2]
[*]现在,如果您打印 num 数组的所有值:
echo ${num[*]}
1 2 4 5
[*]如您所见,数组 num 的第三个元素已被删除。
[*]你也可以用同样的方法删除整个 num 数组:
unset num

创建具有不同数据类型的混合数组
[*]在 bash,与许多其他编程语言不同,您可以创建一个包含不同数据类型的数组。 看看以下 用户.sh bash 脚本:
#!/bin/bash
user=("john" 122 "sudo,developers" "bash")
echo "User Name: ${user[0]}"
echo "User ID: ${user[1]}"
echo "User Groups: ${user[2]}"
echo "User Shell: ${user[3]}"
[*]请注意,用户数组包含四个元素:
- “约翰”—->字符串数据类型
- 122 —> 整数数据类型
- “sudo,developers” —> 字符串数据类型
- “bash” —> 字符串数据类型
[*]因此,将不同的数据类型存储到同一个数组中是完全可以的。 那不是很棒吗?

[*]这将带我们到本教程的结尾; 我希望你喜欢它! 如果你想要更复杂、更真实的东西 example,检查如何拆分字符串 bash 使用数组。
[*]当然,您可以通过解决问题来练习刚刚学到的知识,如果遇到困难或需要提示,请参考他们的解决方案。
Bash 第 4 章练习题 练习 Bash 数组的问题及其解决方案 Bash-Chapter-4-Practice-Questions-Linux-Handbook.pdf 29 KB
下载圈
[*]
[*]在下一章中,我将向您展示如何使用各种 bash 算术运算符。