引子:數組 在執行 find /opt/work/testDdir -name 'file*' 時,有可能會返回多個結果。將會返回的結果保存在變量中,須要對其作 [ -r $findResult ] 的處理時,就會報錯 binary operator expected 。 |
因而,開始嘗試一種方法,能夠處理這樣相似的報錯。並且,在須要輸出時,也便於控制輸出格式。 |
Bash 提供了對一維數組(索引數組、關聯數組)的支持。
ide
1.建立數組spa
當出現這樣的定義時,默認建立索引數組,形如:name[subscript]=value
code
res[i]=$item
使用 declare 聲明一個索引數組索引
declare -a res
一次性,爲數組全部成員賦值,亦可建立關聯數組ip
file=(1 2 3 4 5 6 7 8 9)
關聯數組的聲明md5
declare -A file
2.數組的使用字符串
獲取數組長度:${
#Array[@]}
it
max=${#res[@]}
成員變量引用格式:${name[subscript]}
# 遍歷數組元素 max=${#res[@]} for((i=0; i<max; i++)); do printf "%s\n" "${res[$i]}" done
引用時,不使用數組下標,默認等於使用 [0] 。
$ printf "${res}" /opt/work/testDir/file6
3.二者差別
關聯數組的下標能夠是個字符串
$ declare -A develop $ develop['yt']="yangtao" $ develop['mtf']="matnfei" $ develop['mh']="mahan" $ printf "length of develop: %d\n" "${#develop[@]}" length of develop: 3 $ printf "%s\n" "${develop['yt']}" yangtao $ printf "%s\n" "${develop['mtf']}" matnfei $ printf "%s\n" "${develop['mh']}" mahan
假若是索引數組,使用字符串時,就成了這個樣子
$ declare -a develop $ develop['yt']="yangtao" $ develop['mtf']="matnfei" $ develop['mh']="mahan" $ printf "length of develop: %d\n" "${#develop[@]}" length of develop: 1 $ printf "%s\n" "${develop['yt']}" mahan $ printf "%s\n" "${develop['mtf']}" mahan $ printf "%s\n" "${develop['mh']}" mahan
4.使用實例
處理一組相同的任務時,數組是個好東東。檢查一下是否存在多個rpm包,……
command=(tar bz2 md5sum) maxLength=${#command[@]} for((i=0; i<maxLength; i++)); do rpm -q ${command[$i]} echo $? done
執行腳本效果:
[view@file ma]$ . lib/chkCommand tar-1.26-29.el7.x86_64 0 package bz2 is not installed 1 package md5sum is not installed 1