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')
操作方法同普通的数组一样,注意索引的类型即可