SHELL变量之数组
1.数组的定义
1.1.定义同时赋多个值
[test@Server1 shell]$ names=(tom jack lili)
注意:数组的元素以空格作为分隔符。下标从0开始
1.2按索引赋值
[root@Server1 jdk1.6.0_45]# names[0]=tom [root@Server1 jdk1.6.0_45]# names[1]=jack [root@Server1 jdk1.6.0_45]# names[5]=lily
注意:自定义索引时,索引可以不连续
1.3.定义同时使用通配符赋值
[root@Server1 ~]# files=(/usr/local/jdk1.6.0_45/bin/j*)
将/usr/local/jdk1.6.0_45/bin目录下以j开头的文件作为数组元素。
1.4.定义同时使用命令赋值
通过命令返回的结果通常以换行符作为元素,所以需要先改变默认的分隔符
[root@Server1 ~]# IFS=$'\n' [root@Server1 ~]# files=(` ls -l /usr/local/jdk1.6.0_45/bin/j*`)
2.操作数组
2.1根据索引访问元素
[test@Server1 ~]$ names=(tom jack lily) [test@Server1 ~]$ echo ${names[1]} jack
为什么返回jack,因为默认的索引是从0开始
如果你定义的索引不连续,则需要指定你定义时的索引
[test@Server1 ~]$ unset names [test@Server1 ~]$ names[10]=tom [test@Server1 ~]$ names[100]=jack [test@Server1 ~]$ names[1000]=lili [test@Server1 ~]$ echo ${names[100]} jack
2.2返回数组的所有元素
[test@Server1 ~]$ echo ${names[*]} tom jack lili [test@Server1 ~]$ echo ${names[@]} tom jack lili
2.3返回数组的元素个数
[test@Server1 ~]$ echo ${#names[@]} 3 [test@Server1 ~]$ echo ${#names[*]} 3
2.4返回索引
[test@Server1 ~]$ unset names [test@Server1 ~]$ names[10]=tom [test@Server1 ~]$ names[100]=jack [test@Server1 ~]$ names[1000]=lili [test@Server1 ~]$ echo ${!names[*]} 10 100 1000
2.5增加一个元素
[test@Server1 ~]$ unset names [test@Server1 ~]$ names[10]=tom [test@Server1 ~]$ names[100]=jack [test@Server1 ~]$ names[1000]=lili [test@Server1 ~]$ names+=(sue) #新增元素的索引是最大索引加1
2.6删除一个元素
[test@Server1 ~]$ echo ${names[*]} tom jack lili sue [test@Server1 ~]$ unset names[1000] [test@Server1 ~]$ echo ${names[*]} tom jack sue
2.7循环数组元素和索引
#!/bin/bash names=(tom jack lili) echo "循环数组元素" for name in ${names[*]};do echo $name done echo "循环数组元素" for index in ${!names[*]};do echo $index done
3.关联数组
关联数组的索引可以是字符串,申明的语法是:
declare -A ass_array [test@Server1 ~]$ declare -A fruits_value [test@Server1 ~]$ fruits_value=([apple]='100dollars' [orange]='150 dollars')
操作方法同普通的数组一样,注意索引的类型即可