数组是一个由若干同类型变量组成的集合
bash Shell只支持一维数组,数组从0开始标号,以array[x]表示数组元素,所以array[0]表示array数组的第一个元素。。。。
索引数组:
- 声明数组
格式:数组名=(参数1 参数2 参数3…)
例:
[root@rhel1 ~]# array=(a b c d)
[root@rhel1 ~]# echo ${array[0]}
a
[root@rhel1 ~]# echo ${array[1]}
b
[root@rhel1 ~]# echo ${array[3]}
d
-
数组的基本用法
-
查看数组元素个数
[root@rhel1 ~]# echo ${#array[@]}
4
- 查看数组所有元素
[root@rhel1 ~]# echo ${array[@]}
a b c d
- 查看数组下标
[root@rhel1 ~]# echo ${!array[@]}
0 1 2 3
- 清除数组中某个元素
[root@rhel1 ~]# unset array[1]
[root@rhel1 ~]# echo ${array[@]}
a c d
- 清除整个数组
[root@rhel1 ~]# unset array
[root@rhel1 ~]# echo ${array[@]}
[root@rhel1 ~]#
- 数组切片
(注意:切片时数字为下标)
如下:数组array从下标1开始取3个值
[root@rhel1 ~]# echo ${array[@]:1:3}
b c d
- 数组替换
数组将a替换为A
[root@rhel1 ~]# echo ${array[@]/a/A}
A b c d
数组将所有的a替换为A
[root@rhel1 ~]# echo ${array[@]//a/A}
- 将变量替换为数组
[root@rhel1 ~]# var="11 22 33 44"
[root@rhel1 ~]# var1=($var)
[root@rhel1 ~]# echo ${var1[@]}
11 22 33 44
关联数组
数组bash4.0开始支持关联数组,RHEL5不支持
- 声明数组
[root@rhel1 ~]# declare -A name
[root@rhel1 ~]# name=([user]=xxxy [pwd]=123 [age]=18)
-
数组用法
-
查看数组内容
[root@rhel1 ~]# echo ${name[@]}
123 xxxy 18
[root@rhel1 ~]# echo ${name[user]}
xxxy
- 查看数组下标
[root@rhel1 ~]# echo ${!name[@]}
pwd user age
- 查看数组个数
[root@rhel1 ~]# echo ${#name[@]}
3
拓展:
利用数组实现从文件中随机挑选姓名的脚本
- 有一个包含姓名的文件,姓名之间用空格隔开
- 显示效果如下
编写脚本:array.sh
如下:
#!bash/bin
#利用数组从文件中随机挑选姓名
#以下注释掉的命令手工执行,创建文件list
# cat << eof > list
# 丝丝 坤坤 花花 涛涛 标标 龙龙 蔡蔡
# eof
#文件list中的内容写成数组
array_name=($(cat list))
#数组中所有内容
name=$(echo ${array_name[@]})
#数组中元素的个数
num=$(echo ${#array_name[@]})
#数组中随机选取元素下标
num1=$((RANDOM%$num))
#随机选出下标的数组元素
member=$(echo ${array_name[$num1]})
echo "名单中共有$num位成员:$name"
echo -n "我们一起倒数三秒:"
second=3
for i in {1..3}
do
echo -n "$second "
((second--))
sleep 1
done
echo
echo "这次选出的成员是:${member}"
执行结果如下:bash array.sh
[root@rhel1 test]# bash array.sh
名单中共有7位成员:丝丝 坤坤 花花 涛涛 标标 龙龙 蔡蔡
我们一起倒数三秒:3 2 1
这次选出的成员是:龙龙
[root@rhel1 test]# bash array.sh
名单中共有7位成员:丝丝 坤坤 花花 涛涛 标标 龙龙 蔡蔡
我们一起倒数三秒:3 2 1
这次选出的成员是:标标
[root@rhel1 test]# bash array.sh
名单中共有7位成员:丝丝 坤坤 花花 涛涛 标标 龙龙 蔡蔡
我们一起倒数三秒:3 2 1
这次选出的成员是:标标
[root@rhel1 test]# bash array.sh
名单中共有7位成员:丝丝 坤坤 花花 涛涛 标标 龙龙 蔡蔡
我们一起倒数三秒:3 2 1
这次选出的成员是:蔡蔡