shell数组的定义:
方法一,用小括号将变量值括起来赋值给数组变量,每个变量之间要用空格进行分隔
语法如下
array = ( value1 value2 value3 ... )
示例如下
[root@localhost ~]# array=(1,2,3)
[root@localhost ~]# echo ${array[*]}
1,2,3
方法二,用小括号将变量值括起来,同时采用键值对的形式赋值
语法如下
array=([1]=one [2]=two [3]=three)
示例如下
[root@localhost ~]# array=([1]=one [2]=two [3]=three)
[root@localhost ~]# echo ${array[*]}
one two three
[root@localhost ~]# echo ${array[1]}
one
[root@localhost ~]# echo ${array[2]}
two
[root@localhost ~]# echo ${array[3]}
three
方法三,通过分别定义数组变量的方法来定义
注意:这种定义方法比较麻烦,不推荐使用
语法如下
array[0]=a; array[1]=b; array[2]=c
示例如下
[root@localhost ~]# array[0]=a; array[1]=b; array[2]=c
[root@localhost ~]# echo ${array[0]}
a
[root@localhost ~]# echo ${array[1]}
b
[root@localhost ~]# echo ${array[2]}
c
方法四,动态的定义数组变量,并使用命令的输出结果作为数组的内容
语法如下
array=( $(命令) )
或者:
array=( `命令` )
示例如下
[root@localhost backup]# mkdir array/ -p
[root@localhost backup]# touch array/{1..3}.txt
[root@localhost backup]# ls -l array
总用量 0
-rw-r--r--. 1 root root 0 6月 16 11:28 1.txt
-rw-r--r--. 1 root root 0 6月 16 11:28 2.txt
-rw-r--r--. 1 root root 0 6月 16 11:28 3.txt
[root@localhost backup]# array=($(ls array))
[root@localhost backup]# echo ${array[*]}
1.txt 2.txt 3.txt
打印数组元素
打印单个数组用 ${数组名[下标]} ,当未指定数组下标时,数组的下标从0开始
[root@localhost ~]# array=(one two three)
[root@localhost ~]# echo ${array[0]}
one
[root@localhost ~]# echo ${array[1]}
two
[root@localhost ~]# echo ${array[2]}
three
[root@localhost ~]# echo ${array[*]} #<== 使用* 或者@ 可以得到整个数组的内容
one two three
[root@localhost ~]# echo ${array[@]} #<== 使用* 或者@ 可以得到整个数组的内容
one two three
打印数组元素的个数
[root@localhost ~]# array=(one two three)
[root@localhost ~]# echo ${array[*]} #<== 使用* 或者@ 可以得到整个数组的内容
one two three
[root@localhost ~]# echo ${#array[*]} #<== 获取数组个数
3
[root@localhost ~]# echo ${array[@]} #<== 使用* 或者@ 可以得到整个数组的内容
one two three
[root@localhost ~]# echo ${#array[@]} #<== 获取数组个数
3
数组赋值
[root@localhost ~]# array=(one two three)
[root@localhost ~]# echo ${array[*]}
one two three
[root@localhost ~]# array[3]=four
[root@localhost ~]# echo ${array[*]}
one two three four
[root@localhost ~]# array[0]=zerooo
[root@localhost ~]# echo ${array[*]}
zerooo two three four
[root@localhost ~]# array[1]=twooo
[root@localhost ~]# echo ${array[@]}
zerooo twooo three four
数组的删除
[root@localhost ~]# array=(one two three)
[root@localhost ~]# unset array[1]
[root@localhost ~]# echo ${array[*]}
one three
[root@localhost ~]# unset array
[root@localhost ~]# echo ${array[*]} #<== 删除整个数组
[root@localhost ~]#
数组内容的截取和替换
[root@localhost ~]# array=(1 2 3 4 5)
[root@localhost ~]# echo ${array[*]:1:3} #<== 截取1号到3号数组元素
2 3 4
[root@localhost ~]# array=($(echo {a..z}))
[root@localhost ~]# echo ${array[*]}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@localhost ~]# echo ${array[*]:1:3} #<== 截取1号到3号数组元素
b c d
[root@localhost ~]# echo ${array[*]:0:2} #<== 截取0号到2号数组元素
a b
替换数组元素
[root@localhost ~]# array=(1 2 3 1 1)
[root@localhost ~]# echo ${array[*]/1/b}
b 2 3 b b
删除数组元素
[root@localhost ~]# array=(one two three four five)
[root@localhost ~]# echo ${array[*]}
one two three four five
[root@localhost ~]# echo ${array[*]#o*} #<== 从左边开始匹配最短的数组元素,并删除
ne two three four five
[root@localhost ~]# echo ${array[*]##o*} #<== 从左边开始匹配最长的数组元素,并删除
two three four five
[root@localhost ~]# echo ${array[*]%f*} #<== 从右边开始匹配最短的数组元素,并删除
one two three
[root@localhost ~]# echo ${array[*]%%f*} #<== 从右边开始匹配最长的数组元素,并删除
one two three