這次寫指令碼時用到了bash shell陣列,當初做法是配置檔案裡面寫成陣列形式a=(element1 element2 element3 .... element4),然後乙個指令碼讀取這個配置檔案,於是稍微總結了一下陣列的使用方法:
bash
shell中使用陣列變數
,其賦值/定義有兩種
:1. name=(value1 ... valuen)此時下標從0開始,也可以這樣做:name=([1]=a [2]=b [0]=c)
2. name[index] =value
3. declare -a arrayname=(element1 element2 element3)
4. declare -a unix=('debian' 'red hat' 'red hat' 'suse' 'fedora') # 如果單個元素包括括號
操作方式:
1. 陣列長度:$
2. 遍歷陣列:for i in $ ; do ; echo $i
或者如下:
先得到這個陣列的有效索引:$,然後利用 array[$index]來操作。例如:a=
for idx in $ ; do echo $_$ ; done
需要注意的是 $與$的區別:
當兩者都沒有用""括起來的時候也就是$ $的效果是一樣的,但是有了""
"$" :最大限度的保持原意,比如a[1]='a b' 那麼這樣輸出的也是a b這是乙個整體,而如果沒有"",這輸出的是a b這是兩個元素!
"$":所有的元素都變成乙個字串了,也就是乙個整體
3. 取某乙個元素:array[index],
如果單個元素裡面包含多個空格,那麼保留這多個空格需要"",比如echo "$"
4. 使乙個字串變bash shell 陣列,可以放在檔案裡面,然後source file,但是這個file裡面的內容的是:array=(value1 value2 ... valuen)這種形式,還有一種最簡單的做法:array=(`cat filename`)(此時filename裡面就不是array=這種形式了,而是直接value1 value2 value3...) 或者array=(content)
5. 清除乙個陣列,清0, unset arrayname
6. 連線兩個陣列,array=("$" "$"),用""的目的是防止元素本身包含空格,前面已經提到過
7. 複製乙個陣列,跟上面連線一樣array=
("$")
8. 陣列新增元素,原理也跟上面一樣
array=
("$" "xx")
9. 提取陣列的元素,$ 從第三個位置開始,取兩個元素。如果是針對乙個元素提取(相當於substring)$
貌似bash shell中沒有多維陣列,那麼該怎麼實現呢?我自己想了乙個比較笨的方法,這個方法也得對資料的組織形式有要去:
普通的我們一維陣列是這樣的:
a=(1 2 3 4 5 6)
假設需要乙個二維陣列:
b=(1 2 3,
4 5 6,
7 8 9)
當然這種寫法是不對的,只是便於理解而已。此時我們可以再構造二維陣列之前寫乙個這樣的二維陣列:
a=('1 2 3' '4 5 6' '7 8 9')
然後我們可以利用
for i in "$" ; do
echo $i #這一步就得到了每一行,而如果我們需要二維陣列,那麼可以這樣做
done
for i in "$" ; do
b=($i) #此時b就相當於二維陣列裡面的一維陣列了,然後可以再次遍歷
for j in "$"; do
#do someting
done
done
其實我們有時候完全可以這樣做:構造成這樣:a=(1 2 3 4 5 6 7 8 9),然後操作的時候利用第i行j列的元素等於i*len+j,len是陣列的第二維度大小,這樣做有時候更簡單,但是就必須得控制一下邊界了,比如3*3的陣列,你可能初始化只給出8個元素。
bash shell之陣列使用
摘要 1 array value1 value2 valuen 賦值2 read a array 讀入陣列 3 陣列資訊,陣列下標,陣列長度,去陣列位置 4 array ls grep rpm 命令執行結果放入陣列 5 for i in do 遍歷陣列 6 set grep array 利用set檢...
bash shell 中陣列使用舉例
讓我們先來看乙個 shell 指令碼的執行過程及結果 gysl gysl devops sh array.sh n2 n3 n4 the elements of this array 2 4 are n2 n3 n4 n1 is in array.n2 is in array.n3 is in ar...
HP UX 安裝使用bash shell
hp ux 安裝使用bash shell 一.環境 lsyxdb usr local bin cat etc issue genericsysname hp release b.11.31 see etc issue lsyxdb usr local bin uname a hp ux lsyxdb...