Shell一维数组和二维数组
一维数组
Shell下定义一维数组的形式是A=(element1 element2 element3 .... element4),然后
依次按照A[0] 、A[1]…A[n]来分别读取数组里的内容。
例如:
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]}
例如:
valuen=${array_name[2]}
使用@ 或 * 可以获取数组中的所有元素,例如:
${array_name[*]}
${array_name[@]}
获取数组的长度
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
二维数组
Shell下定义二维数组格式是A=(‘element1 element2’ ‘element3 .... element4’);
例如:
a=('1 2 3' '4 5 6' '7 8 9')
也可以这样
a=(
'1 2 3'
'4 5 6'
'7 8 9'
)
然后我们可以利用
for i in "${a[@]}" ; do
echo $i #这一步就得到了每一行,而如果我们需要二维数组,那么可以这样做
done
for i in "${a[@]}" ; do
b=($i) #此时b就相当于二维数组里面的一维数组了,然后可以再次遍历
for j in "${b[@]}"; do
#do someting
done
done
其实我们有时候完全可以这样做:构造成这样:a=(1 2 3 4 5 6 7 8 9),然后操作的时候利用第i行j列的元素等于i*len+j,len是数组的第二维度大小,这样做有时候更简单,但是就必须得控制一下边界了,比如3*3的数组,你可能初始化只给出8个元素。
比如:
ip_array=(
200 ZC
201 ZR
202 ZR
203 ZR
)
len=${#ip_array[@]}
echo "len is $len"
for((i=0;i<len;i+=2))
do
echo $i
ip=${ip_array[i]}
role=${ip_array[i+1]}
echo "${ip_array[i]} , ${ip_array[i+1]}"
echo "ip is $ip, role is $role"
done