shell 数组(详细)
基本上所有的编程语言都支持数组,shell也不例外,shell数组的定义、赋值和引用数组元素的格式如下:
数组名=(元素1 元素2 元素3 ... 元素n)
数组名=([下标1]=值1 [下标2]=值2 ... [下标n]=值n)
数组名[下标]=值
${数组名[下标]}
编写一个脚本,定义一个数组,使用两种方式赋值,并打印数组元素的值:
#!/bin/bash
a=(1 2 3 4 5 6)
echo ${a[0]}
b=([0]=10 [1]=2 [5]=6)
echo ${b[0]}
echo ${b[8]}
a[0]=100
echo ${a[0]}
运行这个脚本:
root@pc:/home/demo# ./hello.sh
1
10
100
遍历数组元素
可以使用for或while循环来遍历数组元素
root@pc:/home/demo# cat hello.sh
#!/bin/bash
a=(1 2 3 4 5 6)
for((i=0; i<10; i++))
do
echo "a[$i]=${a[$i]}"
done
root@pc:/home/demo# ./hello.sh
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=6
a[6]=
a[7]=
a[8]=
a[9]=
还有一种更方便的方法,可以使用${a[*]}、\${a[@]}来遍历数组中的所有元素。
root@pc:/home/demo# cat hello.sh
#!/bin/bash
a=(1 2 3 4 5 6)
echo ${a[*]}
echo ${a[@]}
root@pc:/home/demo# ./hello.sh
1 2 3 4 5 6
1 2 3 4 5 6
数组长度
shell的数组长度即数组元素的个数。通过上面的脚本可以看到,当我们对数组越界访问时shell也不会报错。我们可以使用#来获取数组真正的长度:
#!/bin/bash
a=(1 2 3 4 5 6)
echo ${a[*]}
echo "a len: ${#a[*]}"
a[6]=7
echo ${a[@]}
echo "a len: ${#a[@]}"
我们可以先使用a[*]或a[@]获取数组的所有元素,然后使用#来获取元素的格式即可。上面的脚本的运行结果:
1 2 3 4 5 6
a len: 6
1 2 3 4 5 6 7
a len: 7
数组合并
shell支持将两个数组合并成一个新的数组,以下面的脚本为例,将数组a和数组b合并为一个新的数组c:
#!/bin/bash
a=(1 2 3 4 5 6)
echo ${a[*]}
echo "a len: ${#a[*]}"
b=("hello" "zhaixue.cc")
echo ${b[@]}
echo "b len: ${#b[@]}"
c=(${a[*]} ${b[*]})
echo ${c[@]}
echo "c len: ${#c[@]}"
C语言的二维数组,二维数组的每一个数组元素是一个一位数组。shell数组也是类似,可以将一个shell数组作为新数组的一个元素,将达到了数组合并的效果了。脚本的运行结果如下:
root@pc:/home/demo# ./hello.sh
1 2 3 4 5 6
a len: 6
hello zhaixue.cc
b len: 2
1 2 3 4 5 6 hello zhaixue.cc
c len: 8
删除数组元素
shell可以使用unset来删除一个数组元素,或者删除整个数组:
#!/bin/bash
a=(1 2 3 4 5 6)
echo ${a[*]}
echo "a len: ${#a[*]}"
unset a[5]
echo ${a[*]}
echo "a len: ${#a[*]}"
unset a
echo ${a[*]}
echo "a len: ${#a[*]}"
脚本运行结果:
1 2 3 4 5 6
a len: 6
1 2 3 4 5
a len: 5
a len: 0
《Linux三剑客》视频教程:Linux下开发工具vim、Git、Makefile、autotools、qemu、debug精讲,从零开始一步一步写项目的Makefile,提供企业级Makefile模板,Git操作实战,vim从新手到高手,一步一步打造类似Source Insight的IDE!详情点击:王利涛老师个人淘宝店:Linux三剑客