数组-在Shell脚本中的基本使用介绍

 

Shell脚本在运维工作中是极其重要的,而数组在shell脚本里的运用无论是在循环或运算方面都是非常实用的一个环节。
下面是对shell脚本中数组方面一些操作在此进行记录,希望能帮助到有兴趣的朋友~
1.数组定义
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo $a
1
一对括号表示是数组,数组元素用"空格"符号分割开。即数组的定义要使用()

########  组数常用的几个替换方法  ########
${A[@]} 或 ${A[*]}       表示获得全部组数,即得到be sh se cho 。
${A[0]}          表示获得数组中的第1个组数。同理,${A[1]} 获得的是第2个组数。
${#A[@]} 或 ${#A[*]}        表示获得全部组数数量。
${#A[0]}          表示获得第一个组数的长度,即be的长度,为2; 同理,${#A[3]} 表示获得第四个组数的长度,即cho的长度,为3;
A[1]=haha      表示将第2个组数重新定义为haha; 同理,A[3]=heihei 表示将第4个组数重新定义为heihei;

2.数组读取与赋值
1)得到长度
[root@bastion-IDC ~]# echo ${#a[@]}
8
[root@bastion-IDC ~]# echo ${#a[*]}
8

用${#数组名[@或*]} 可以得到数组长度

2)读取:
[root@bastion-IDC ~]# echo ${a[4]}
5
[root@bastion-IDC ~]# echo ${a[*]}
1 2 3 4 5 6 7 8

用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容

3)赋值:
[root@bastion-IDC ~]# a[1]=100
[root@bastion-IDC ~]# echo ${a[*]}
1 100 3 4 5 6 7 8
[root@bastion-IDC ~]# a[5]=140
[root@bastion-IDC ~]# echo ${a[*]}
1 100 3 4 5 140 7 8

直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素

4)删除:
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# unset a
[root@bastion-IDC ~]# echo ${a[*]}

[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# unset a[1]
[root@bastion-IDC ~]# echo ${a[*]}
1 3 4 5 6 7 8

[root@bastion-IDC ~]# echo ${a[0]}
1
[root@bastion-IDC ~]# echo ${a[1]}

[root@bastion-IDC ~]# echo ${a[2]}
3
[root@bastion-IDC ~]# echo ${a[3]}
4


[root@bastion-IDC ~]# echo ${#a[*]}
7

直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。

注意:当某个元素删除后,再次读取这个元素就是空。如果a[1]删除后,就第二个元素2删除了,再次读取a[1]就是空,并不是新的第二个元素3。

3.特殊使用
1)分片:
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo ${a[@]:0:3}
1 2 3
[root@bastion-IDC ~]# echo ${a[@]:1:4}
2 3 4 5
[root@bastion-IDC ~]# c=(${a[@]:1:4})
[root@bastion-IDC ~]# echo ${#c[@]}
4
[root@bastion-IDC ~]# echo ${c[*]}
2 3 4 5

直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。

2)替换:
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo ${a[@]/3/100}
1 2 100 4 5 6 7 8
[root@bastion-IDC ~]# echo ${a[@]}
1 2 3 4 5 6 7 8
[root@bastion-IDC ~]# a=(${a[@]/3/100})
[root@bastion-IDC ~]# echo ${a[@]}
1 2 100 4 5 6 7 8

[root@bastion-IDC ~]# a=(echo ${a[@]})    #新赋值时,()代表输出里面的命令结果
[root@bastion-IDC ~]# echo ${a[@]}
echo 1 2 100 4 5 6 7 8
[root@bastion-IDC ~]# a=(echo ${a[@]})  
[root@bastion-IDC ~]# echo ${a[@]}
echo echo 1 2 100 4 5 6 7 8

调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。

 

posted @ 2016-08-11 17:55  散尽浮华  阅读(13136)  评论(1编辑  收藏  举报