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
相关文章
相关标签/搜索