您的位置 首页 shell脚本

shell数组遍历详细介绍

这篇文章主要介绍 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

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章