引子: 在执行 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/file63.两者差异
关联数组的下标可以是个字符串
$ 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']}"
mahan4.使用实例
处理一组相同的任务时,数组是个好东东。检查一下是否存在多个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
















