shell 數組

引子:

  在執行 find /opt/work/testDdir -name 'file*' 時,有可能會返回多個結果。將會返回的結果保存在變量中,需要對其做 [ -r $findResult ] 的處理時,就會報錯  binary operator expected 。

  於是,開始嘗試一種方法,可以處理這樣類似的報錯。而且,在需要輸出時,也便於控制輸出格式。


  Bash 提供了對一維數組(索引數組、關聯數組)的支持。

1.創建數組


  當出現這樣的定義時,默認創建索引數組,形如:name[subscript]=value

res[i]=$item

  使用 declare 聲明一個索引數組

declare -a res


  一次性,爲數組所有成員賦值,亦可創建關聯數組

file=(1 2 3 4 5 6 7 8 9)

  關聯數組的聲明

declare -A file


2.數組的使用


  獲取數組長度:${#Array[@]}

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章