shell 數組

引子:數組

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

  因而,開始嘗試一種方法,能夠處理這樣相似的報錯。並且,在須要輸出時,也便於控制輸出格式。


  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
相關文章
相關標籤/搜索