陣列-在Shell指令碼中的基本使用介紹

散盡浮華發表於2016-08-11

 

Shell指令碼在運維工作中是極其重要的,而陣列在shell指令碼里的運用無論是在迴圈或運算方面都是非常實用的一個環節。
下面是對shell指令碼中陣列方面一些操作在此進行記錄,希望能幫助到有興趣的朋友~
1.陣列定義
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo $a
1
一對括號表示是陣列,陣列元素用“空格”符號分割開。

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[*]}
7

直接通過:unset 陣列[下標] 可以清除相應的元素,不帶下標,清除整個資料。

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

呼叫方法是:${陣列名[@或*]/查詢字元/替換字元} 該操作不會改變原先陣列內容,如果需要修改,可以看上面例子,重新定義資料。

相關文章