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数组,可以让工作更加得心应手。