和其他编程语言一样,shell也有数组这一个概念。Shell的数组存的是数据元素。和Python的列表类似,不管是数字还是字符串,都可以存到一块。
数组的下标也是和其他编程语言一样,从0开始。用[]来表示下标。可惜的是Bash Shell只支持一维数组。
Shell数组的定义:
用()来表示数组,数组元素之间用空格来分隔。例如:
[root@localhost shell_protest]# cat array.sh
#!/bin/bash
array_name=(nick mike amy topate 123)
printf "%s\n" $array_name
[root@localhost shell_protest]# sh array.sh
nick
!!我们发现,不打下标,输出的是一个数组的第一个元素。
获取数组元素
那怎么去查看第二个元素呢?
那就涉及到前面输入输出的{},{}可以让解释器识别你想要识别的边界,要不然会输出异常。如下:
[root@localhost shell_protest]# sh array.sh
mike
nick[1]
--------------------Source-----------------------------------
[root@localhost shell_protest]# cat array.sh
#!/bin/bash
array_name=(nick mike amy topate 123)
printf "%s\n" ${array_name[1]}
echo $array_name[1]
当然!shell也可以像python一样,获取数组的全部元素。
利用[*]或者[@]作为下标即可:
[root@localhost shell_protest]# sh array.sh
mike
nick[1]
nick mike amy topate
nick mike amy topate
---------------------Source--------------------------
[root@localhost shell_protest]# cat array.sh
#!/bin/bash
array_name=(nick mike amy topate)
printf "%s\n" ${array_name[1]}
echo $array_name[1]
echo ${array_name[*]}
echo ${array_name[@]}
那么,我们总不能单次定义,不改变数组内容。我们应该怎么改变数组呢?
修改数组:
重建数组:
利用array=(),可以指定位置,也可以不指定位置,不指定位置的话,默认从0开始存
[root@localhost shell_protest]# sh array.sh
nick mike amy topate
12 13
2 13
------------------Source----------------------------------
[root@localhost shell_protest]# cat array.sh
#!/bin/bash
array_name=(nick mike amy topate)
echo ${array_name[@]}
array_name=(12 13)
echo ${array_name[*]}
array_name=([12]=13 [1]=2)
echo ${array_name[*]}
增加元素:
增加元素有这几种方法:
1、利用重建的方法array=()
2、利用+=方法
3、通过下标添加
[root@localhost shell_protest]# sh array.sh
nick mike amy topate
12 13
2 13
2 13 0 2
2 13 0 2 11 222
2 13 0 2 11 222 1
[root@localhost shell_protest]# cat array.sh
#!/bin/bash
#初始
array_name=(nick mike amy topate)
echo ${array_name[@]}
#=================重建数组
array_name=(12 13)
echo ${array_name[*]}
#=============重建数组
array_name=([12]=13 [1]=2)
echo ${array_name[*]}
#======通过array=(${array_name[*]} element1 ..)
#添加
array_name=(${array_name[*]} 0 2)
echo ${array_name[*]}
#通过+=方式
array_name+=(11 222)
echo ${array_name[*]}
#通过下标增加
array_name[12]=1
echo ${array_name[*]}
删除元素:
全部删除通过重建的方法:
#往上面代码加上
array_name=() 或者是 unset array_name
echo ${array_name[*]}
[root@localhost shell_protest]# sh array.sh
nick mike amy topate
12 13
2 13
2 13 0 2
要删除某个元素:就加上下标:
unset array_name[index]
更多关于数组的操作:
获取数组长度:
思路是利用@或者*:
${#array_name[@]}
${#array_name[*]}
#但是这样就变成获取数组第三个元素的长度
${#array_name[2]}
数组的拼接:
还是利用上面的函数:
[root@localhost shell_protest]# sh array1.sh
nick mike amy topate
nick mike amy topate nick mike amy topate
[root@localhost shell_protest]# cat array1.sh
#!/bin/bash
array_name=(nick mike amy topate)
echo ${array_name[@]}
array_name=(${array_name[@]} ${array_name[*]})
echo ${arra
y_name[*]}