这篇文章主要介绍 shell数组的遍历,以及如何定义
shell编程中主要分为2种:
1)普通数组 只能以数字整数作为索引(元素名称,下标)
2)关联数组 可以以字符串作为索引 (需要单独声明,下边有详细介绍)
简单的理解,就是我们用 索引取 数组的时候, 普通数组只能以数字作为索引, 而 关联数组 可以是字符串作为索引
比如通过索引查看数组的内容 :
echo $array[index1] #必须是关联数组
echo $array[1] #
语法结构:
数组名称[元素名称]=元素的值
数组定义方法:
shell 数组定义方式1
array[0]=shell
array[1]=mysql
array[2]=docker
unset array # 取消数组
shell 数组定义方式2:直接赋值
array=(shell test hehe docker k8s)
[root@web00 ~]# echo ${array[*]} # * 是列出所有的元素
shell test hehe docker k8s
[root@web00 ~]# echo ${!array[*]} # !是列出数组所有的下标(for 遍历可以用)
0 1 2 3 4
shell 数组定义其他定义方式:
[root@web00 ~]# array=([5]=shell mysql redis [20]=hehe)
[root@web00 ~]# echo ${array[*]}
shell mysql redis hehe
[root@web00 ~]# echo ${!array[*]}
5 6 7 20
[root@web00 ~]# array=(`echo shell mysql redis hehe`)
[root@web00 ~]# echo ${!array[*]}
0 1 2 3
[root@web00 ~]# echo ${array[*]}
shell mysql redis hehe
查看数组中的值:
[root@web00 ~]# echo ${array[0]}
shell
[root@web00 ~]# echo ${array[2]}
docker
[root@web00 ~]# echo ${array[1]}
mysql
[root@web00 ~]# echo ${array[*]}
shell mysql docker
[root@web00 ~]# echo ${array[@]}
shell mysql docker
数组的遍历:
(1)数组的遍历: 直接取所有的值进行遍历
#!/bin/bash
ip=(
10.0.0.2
10.0.0.4
202.106.0.20
114.114.114.114
223.5.5.5
8.8.8.8
23.88.91.222
)
for i in ${ip[*]}
do
ping -c1 -W1 $i &>/dev/null
[ $? -eq 0 ] && echo "$i 在线"
done
(2)数组遍历方式: 按照索引取值进行遍历
#!/bin/bash
ip=(
10.0.0.2
10.0.0.4
202.106.0.20
114.114.114.114
223.5.5.5
8.8.8.8
23.88.91.222
)
for i in ${!ip[*]}
do
echo ${ip[$i]}
done
关联数组
关联数组定义方式:
declare -A array # 声明为关联数组
简单的理解,就是我们用 索引取 数组的时候,
[root@web00 day05]# array[index1]=shell
[root@web00 day05]# array[index2]=mysql
[root@web00 day05]# array[index3]=redis
[root@web00 day05]# echo ${array[*]}
shell mysql redis
[root@web00 day05]# echo ${!array[*]}
index1 index2 index3
[root@web00 ~]# ${array[index1]}
案例1: 统计性别出现的次数
[root@web00 day05]# cat sex.txt
f
f
m
f
m
f
x
#!/bin/bash
declare -A array
while read line
do
let array[$line]++
done<sex.txt
echo ${array[*]}
输出结果:
#!/bin/bash
declare -A array
while read line
do
let array[$line]++
done<sex.txt
for i in ${!array[*]}
do
echo $i 出现了 ${array[$i]} 次
done
抓阄:
1.输入姓名 姓名后面出现一个1-100的随机数
2.出现过的数字不能在出现
3.取随机数的TOP排行
[root@web00 day05]# cat zhuaj.sh
#!/bin/bash
>ran.txt
while true
do
read -p "请输入你的姓名: " name
if [ $name == ok ];then
echo "抓阄完毕排序如下"
sort -rnk2 ran.txt
exit
fi
while true
do
ran=`echo $((RANDOM%100+1))`
if [ `cat ran.txt|grep -w $ran|wc -l` -eq 1 ];then
continue
else
echo -e "$name \t $ran"|tee -a ran.txt
break
fi
done
done
宗玉案例:
seq 100 > seq
> mingdan
for i in `seq 3`
do
read -p "第$i位同学输入" name
shuzi=`shuf -n 1 seq`
sed -i "/\b${shuzi}\b/d" seq
echo "$shuzi $name " >> mingdan
echo "$shuzi $name "
done
echo '3次输入完毕,排名如下'
cat mingdan|sort -nr
shell数组长度
shell数组赋值
shell数组添加元素
shell数组定义
shell数组
shell数组下标从几开始
shell 数组包含某个元素
shell数组删除元素
shell数组去重
欢迎来撩 : shell 编程从0到1
欢迎来撩 : 汇总all