Shell编程:数组
数组
数组中可以存放多个值。Bash只支持一维数组,初始化时无需定义数组大小,数组元素下标从0开始。Shell数组用括号表示,元素之间由空号隔开:
array_name=(value1 value2 ... valuen)
实例
创建数据
#!/bin/bash
my_array=(A B "C" D)
也可以通过下标赋值来定义数组
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取数组
读取数组的一般格式为:
${array_name[index]}
现在创建一个脚本test.sh
来演示一下:
#!/bin/bash
#创建脚本test.sh
my_array=(A B "C" D)
echo "第一个元素为:${my_array[0]}"
echo "第二个元素为:${my_array[1]}"
echo "第三个元素为:${my_array[2]}"
echo "第四个元素为:${my_array[3]}"
执行脚本结果如下
$ chmod +x test.sh
$ ./test.sh
第一个元素为:A
第二个元素为:B
第三个元素为:C
第四个元素为:D
获取数组中所有元素
使用@或者*可以获取数组中的所有元素
#!/bin/bash
# 创建脚本test.sh
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
执行脚本结果如下:
$ ./test.sh
数组的元素为: A B C D
数组的元素为: A B C D
获取数组长度
获取数组长度的方法与获取字符串长度的方法相同
#!/bin/bash
# 创建脚本test.sh
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
执行脚本结果如下
$ ./test.sh
数组元素个数为: 4
数组元素个数为: 4
数组的值也可以写入变量
#!/bin/bash
# 创建脚本test.sh
A=1
my_array=($A B C D)
echo "第一个元素为:${my_array[0]}"
echo "第二个元素为:${my_array[1]}"
echo "第三个元素为:${my_array[2]}"
echo "第四个元素为:${my_array[3]}"
执行脚本结果如下
$ ./test.sh
第一个元素为:1
第二个元素为:B
第三个元素为:C
第四个元素为:D
数组下标也可以为变量
#!/bin/bash
# 创建脚本test.sh
my_array=(A B C D)
i=2
echo ${my_array[i]}
执行脚本结果如下
$ ./test.sh
C
数组遍历
这里讲解几种方法用于数据遍历
#!/bin/bash
# 创建演示脚本test.sh
my_array=(A B C D E F G)
echo "---------for循环遍历数组-----------"
for i in ${my_array[@]}
do
echo $i
done
echo "--------while循环遍历数组,使用let i++自增-------------"
i=0
#注意[与$之间要有空格,否则报错,下同
while [ $i -lt ${#my_array[@]} ]
do
echo ${my_array[$i]}
let i++
done
echo "-------while循环遍历数组,使用let "n++ "自增:双引号可有可无,推荐加上双引号-----------"
n=0
while [ $n -lt ${#my_array[@]} ]
do
echo ${my_array[$n]}
let "n++"
done
echo "-----------while循环遍历数组,使用let m+=1自增--------------"
m=0
while [ $m -lt ${#my_array[@]} ]
do
echo ${my_array[$m]}
let m+=1
done
echo "------------------while循环遍历数组,使用a=$[$a+1]自增------------------"
a=0
while [ $a -lt ${#my_array[@]} ]
do
echo ${my_array[$a]}
a=$[$a+1]
done
执行脚本结果如下
$ ./test.sh
---------for循环遍历数组-----------
A
B
C
D
E
F
G
--------while循环遍历数组,使用let i++自增-------------
A
B
C
D
E
F
G
-------while循环遍历数组,使用let n++ 自增:双引号可有可无,推荐加上双引号-----------
A
B
C
D
E
F
G
-----------while循环遍历数组,使用let m+=1自增--------------
A
B
C
D
E
F
G
------------------while循环遍历数组,使用a=$[$a+1]自增------------------
A
B
C
D
E
F
G
可以看出各种遍历方法大同小异,区别就在于自增方式的不同