shell数组

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 ~]#
posted @ 2020-11-10 14:31  Charramma  阅读(163)  评论(0编辑  收藏  举报