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
" "${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
" "${#develop[@]}"
length of develop: 3
$ printf "%s
" "${develop['yt']}"
yangtao
$ printf "%s
" "${develop['mtf']}"
matnfei
$ printf "%s
" "${develop['mh']}"
mahan

  倘若是索引数组,使用字符串时,就成了这个样子

$ declare -a develop
$ develop['yt']="yangtao"
$ develop['mtf']="matnfei"
$ develop['mh']="mahan"
$ printf "length of develop: %d
" "${#develop[@]}"
length of develop: 1
$ printf "%s
" "${develop['yt']}"
mahan
$ printf "%s
" "${develop['mtf']}"
mahan
$ printf "%s
" "${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
一切代码都是为了生活,一切生活都是调剂
原文地址:https://www.cnblogs.com/argor/p/7920153.html