一、數組定義
1.1 declare定義
使用declare -a 命令定義數組(數組的索引是從0開始計數的),接下來就能夠經過[]操做符爲不一樣索引位置的元素賦值。shell
declare -a names names[0]=tom names[1]=jack
注意:shell變量是弱類型的,比要求數組中元素類型相同數組
在定義數組的同時,能夠同時賦值,用()表示,各元素之間用空格隔開bash
#定義的同時直接賦值 declare -a names=(tom jack) #增長元素 names[2]=sue
1.2直接定義
建立數組最簡單的方法是使用()直接定義數組,括號中元素用空格隔開;在括號中也能夠聲明下標。實例:post
#使用()直接數組 days1=(one two three four five) #或者在()中聲明下標,默認從0開始 days2=([0]=’one’ [1]=’two’ [2]=’three’ [3]=’four’) #下標能夠不連續 days3=([0]=’one’ [2]=’three’)
1.3帶下標定義
使用[]操做符,爲每個指定下標賦值,下標也能夠不連續spa
header[0]=’user’ header[1]=’pid’ header[2]=’%CPU’ header[3]=’%MEM’
1.4從文件讀取數組
days=(`cat days.txt`)
二、數組操做
2.1賦值
指定下標,使用[]操做符爲元素賦值,當下標不存在時,至關於爲數組增長元素code
declare -a names names[0]=tom
2.2取值
指定下標,使用[]操做符從數組中對應元素,而後使用$取值,格式:${數組名[索引]}blog
days=(one two three four five) #取出第1個元素 echo ${days[0]} #取出第3個元素 echo ${days[2]}
得到數組中全部值:${數組名[@]}、${數組名[*]}索引
${數組名[@]}獲得是以空格隔開的元素,能夠用在數組遍歷中;${數組名[*]}獲得的是一整個字符串。three
注意:${數組名}並不會得到全部值,它只會得到到第一個元素的值。即${數組名}等價於${數組名[0]}字符串
示例:
#!/bin/bash #數組取值 days=(one two three four) echo ${days} echo ${days[0]} echo ${days[1]} echo ${days[@]} echo ${days[*]} echo "**********" names=() names[1]=tom names[2]=jack echo ${names} echo ${names[1]} echo ${names[@]}
結果:
2.3長度
利用」@」或「*」字符,將數組擴展成列表,而後使用」#」來獲取數組元素的個數。
示例:
#!/bin/bash #數組個數 days=(one two three four) echo "數組days的元素個數爲:${#days[@]}" echo "**********" names=() names[1]=tom names[2]=jack echo "數組names的元素個數爲:${#names[*]}"
結果:
注意:若是某個元素是字符串,能夠經過制定索引的方式得到該元素的長度。
2.4遍歷
存在如下三種方式:
(1)${數組名[@]}、${數組名[@]}都可以得到全部元素(無論是元素列表,仍是一整個字符串),使用for循環遍歷便可
(2)帶數組下標的遍歷,當須要使用到數組的下標時,可使用${!數組名[@]}
(3)while循環:根據元素的個數遍歷,但對於稀疏數組,可能會丟失數據
示例:
#!/bin/bash #數組遍歷 days=(one two three four) #for循環遍歷 for day in ${days[*]} #或${days[@]} do echo $day done echo "***************" #fou循環帶下標遍歷 for i in ${!days[@]} do echo ${days[$i]} done echo "***************" #while循環 names=() #數組names是一個稀疏數組 names[1]=tom names[2]=jack i=0 while [ $i -lt ${#names[*]} ] do echo ${names[$i]} let i++ done
結果:
2.5刪除
刪除一個數組或數組中元素用unset命令。
unset 數組名[索引] #刪除索引下的元素
unset 數組名 #刪除整個數組
2.6鏈接
用()將多個數組鏈接在一塊兒,()中各個數組用空格隔開。
days=(one two three four) names=(tom jack) days=(${days[@]} ${names[@]})