shell中數組擴展技巧及實例

1、申明數組

例一:

a=(111 222)    #一對括表示是數組,數組元素用“空格“符號分割開。

echo ${a[0]}    #數組下標從0開始

echo $a          #數組也是指針形似,數組名稱相當於一個指針,指向第一個數組元素

輸出:

111

111 


例二:

a=([0]=111 [1]=222)


例三:

a[0]=111

a[1]=222


2、數組的控制檯輸入

例一:

read a[0]   #輸入222回車

read a[1]   #輸入333回車

echo ${#a[@]}

輸出:2


3、數組元素的刪除

例一:

a=(111 222)

unset a[1]    #刪除a[1]元素

echo ${#a[@]}

輸出:1


例二:

a=(111 222 333)

unset a        #刪除a數組

echo ${#a[@]}

輸出:0


4、取數組的元素個數

規則:${#數組變量[@]}或${#數組變量[*]}

例一:

echo ${#a[@]}    #對於shell腳本傳參數,$@表示所有的參數,$#表示參數的個數,不難理解,數組也是這樣

輸出:2


5、取數組索引列表

規則:${!數組變量[@]}或${!數組變量[*]}
含義:把數組變量所有的索引列出,各索引值之間用空格符分開

例一:

filelist=(/etc/passwd  /etc/issue  /etc/sysconfig/syslog)
for  index  in ${!filelist[@]}
do 
       echo "index  $index:${filelist[$index]}"
done

輸出:

index  0:/etc/passwd
index  1:/etc/issue
index  2:/etc/sysconfig/syslog


6、子串提取

規則:${數組變量[@]:startindex:length}或${#數組變量[*]:startindex:length}

例一:

a=(111 222 333 444 555)

echo  ${a[@]:0:3}  #在數組中可以用:n進行數組的範圍分片,顯示一個範圍的數值


7、子串替換

a=(111 222 333 444 555)

例一:第一個匹配到的,會被替換

echo ${a[@]/1/6}

輸出:

611 222 333 444 555


例二:所有匹配到的,會被替換

echo ${a[@]//1/6}

輸出:

666 222 333 444 555


例三:沒有指定替換子串,則刪除匹配到的子符

echo ${a[@]//1/}

輸出:

222 333 444 555


例四:替換字符串前端子串

echo ${a[*]/#1/6}

611 222 333 444 555


例五:替換字符串後端子串

echo ${a[*]/%1/6}

輸出:

116 222 333 444 555


小技巧:

1.生成30個#字符

seq -s '#' 30 | sed -e 's/[0-9]*//g'




發佈了36 篇原創文章 · 獲贊 12 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章