Shell数组使用

in 互联网技术 with 0 comment  访问: 3,608 次


Shell在编程方面比 Windows 批处理强大很多,无论是在循环、运算。

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

简单的说,数组就是各种数据类型的元素按一定顺序排列的集合。

数组就是把个元素变量或数据用一个名字命名。然后用编号区分它们的变量的集合。这个名字称为数组名,编号称为数组下标。

数组的定义

在Shell中,用括号来表示数组,数组元素用空格符号分割开。定义数组的一般形式为:

array_name=(value1 ... valuen)

示例:

array_name=(value0 value1 value2 value3)

或者

array_name=(
value0
value1
value2
value3
)

还可以单独定义数组的各个分量:

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

可以不使用连续的下标,而且下标的范围没有限制。

读取数组

读取数组元素值的一般格式是:

${array_name[index]}

例如:

value2=${array_name[2]}

举个例子:

#!/bin/bash
NAME[0]="dog"
NAME[1]="deer"
NAME[2]="tiger"
NAME[3]="ant"
NAME[4]="fox"
echo "First Index Vaule: ${NAME[0]}"
echo "Second Index Value: ${NAME[1]}"

运行脚本,输出:

# ./test.sh
First Index Value: dog
Second Index Value: deer

使用@或*可以获取数组中的所有元素,例如:

${array_name[*]}
${array_name[@]}

举个例子:

#!/bin/bash
NAME[0]="dog"
NAME[1]="deer"
NAME[2]="tiger"
NAME[3]="ant"
NAME[4]="fox"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"

运行脚本,输出:

# ./test.sh
First Method: dog deer tiger ant fox
Second Method: dog deer tiger ant fox

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

案例

比如我们检查elasticsearch索引创建的时候,如果利用shell脚本,利用数组是最为方便的:

#!/bin/bash
# Author: nock
export PATH=/usr/local/jdk1.8.0_25//bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
daytime=$(date "+%Y%m%d")

data_name=(
phptopic
javatopic
jstopic
mobiletopic
dotnettopic
gotopic
)

uuid_group=(
733a8447-5974-4e2a-ac1d-7bd037e967ef
0d307791-9483-4374-a078-5c41f8a7a015
6351f908-9697-41ad-a580-581e17a5e4cc
f9bcffcb-c7b5-49be-a9fa-d9fc46fb8b8a
ce73f2b8-60ab-471a-97bd-baf70495f0b7
2d5cf154-591a-4cb0-bf7f-c583c8f85bf7
)

length=${#uuid_group[@]}

for((i=0;i<${length};i++));do
        curl -s -XGET 'http://192.168.1.38:9200/_cat/indices' |grep ${uuid_group[${i}]}_${daytime} > /dev/null
        if [[ $? -ne 0 ]];then
            echo "data-source: ${data_name[${i}]} not create es index"
            # The alarm notifies the uncreated index type 
        fi
done

总结

上面简单介绍了Shell数组的使用,在Shell编程中巧妙的使用Shell数组,可以让工作更加得心应手。

WeZan