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

可以看出各种遍历方法大同小异,区别就在于自增方式的不同

Researcher

I am a PhD student of Crop Genetics and Breeding at the Zhejiang University Crop Science Lab. My research interests covers a range of issues:Population Genetics Evolution and Ecotype Divergence Analysis of Oilseed Rape, Genome-wide Association Study (GWAS) of Agronomic Traits.

comments powered by Disqus