shell数组
- shell数组可以存放多个值
- shell数组可以存放多种类型
- shell数组初始化不需要定义数组大小和类型
- shell只支持一维数组
- shell数组下标从0开始
shell数组的定义
shell数组可以使用括号包裹数组元素进行定义和初始化,数组元素之间使用空格分隔
[root@charramma ~]# name=(Tom 'Jerry' "David")
[root@charramma ~]# num=(11 22 33 44 55)
[root@charramma ~]# arr=(123 'hello' world)
[root@charramma ~]# echo ${name[*]}
Tom Jerry David
[root@charramma ~]# echo ${num[*]}
11 22 33 44 55
[root@charramma ~]# echo ${arr[*]}
123 hello world
也可以使用索引进行定义。如果该索引上没有数组元素就是定义,如果有数组元素就是替换。
[root@charramma ~]# name[3]=Nick
[root@charramma ~]# echo ${name[*]}
Tom Jerry David Nick
[root@charramma ~]# name[2]=George
[root@charramma ~]# echo ${name[*]}
Tom Jerry George Nick
shell数组的使用
#!/bin/bash
# 定义数组
num=(12 34 56 78)
# 打印输出所有数组元素
echo "数组num的元素有:${num[*]}"
echo "数组num的元素有:${num[@]}"
# 打印输出第一个数组元素
echo "数组num第一个元素为 $num"
echo "数组num第一个元素为 ${num[0]}"
# 获取数组长度
echo "数组num的元素个数为:${#num[*]}"
echo "数组num的元素个数为:${#num[@]}"
# 向数组头部插入数组
num=(11 ${num[*]})
echo "在数组头部插入11:${num[*]}"
# 向数组尾部插入数组
num=(${num[*]} 99)
echo "在数组尾部插入99:${num[@]}"
# 删除数组元素
unset num[1]
echo "删除第2个数组元素后,数组num的元素有:${num[*]}"
# 删除数组
unset num
echo "数组已被删除:${num[*]}"
执行脚本
[root@charramma ~]# sh arr.sh
数组num的元素有:12 34 56 78
数组num的元素有:12 34 56 78
数组num第一个元素为 12
数组num第一个元素为 12
数组num的元素个数为:4
数组num的元素个数为:4
在数组头部插入11:11 12 34 56 78
在数组尾部插入99:11 12 34 56 78 99
删除第2个数组元素后,数组num的元素有:11 34 56 78 99
数组已被删除:
[root@charramma ~]#
附:我做过的一道面试题
在面试一家公司的时候做过这样一道笔试题:
假如有一个文件a.txt,内容为9,13,51,60,编写test.sh脚本,要求执行脚本后输出结果如下:
9是小于50的
13是小于50的
51是小于50的
60是大于50的
这题就可以用到数组,思路是读取a.txt的内容,然后用tr命令将逗号替换为空格,将这几个数字作为数组num的数组元素。最后for遍历数组进行判断输出。
[root@charramma ~]# cat a.txt
9,13,51,60
[root@charramma ~]# cat a.sh
#!/bin/bash
num=($(cat a.txt | tr ',' ' '))
for i in ${num[*]}; do
if [[ $i < 50 ]]; then
echo "$i 是小于50的"
elif [[ $i = 50 ]]; then
echo "$i 是等于50的"
else
echo "$i 是大于50的"
fi
done
[root@charramma ~]# sh a.sh
9 是大于50的
13 是小于50的
51 是大于50的
60 是大于50的
[root@charramma ~]#