
Shell数组应用
1.数组分类
普通数组:只能使用整数 作为数组索引
关联数组:可以使用字符串 作为数组索
2.普通数组
1.数组赋值方式一, 针对每个索引进行赋值
#数组名[索引]=变量值
[root@Shell ~]# array1[0]=pear
[root@Shell ~]# array11=apple
[root@Shell ~]# array1[2]=orange
[root@Shell ~]# array1[3]=peach
2.数组赋值方式二, 一次赋多个值#数组名=(多个变量值)
[root@Shell ~]# array2=(tom jack alice)
[root@Shell ~]# array3=(tom jack alice "bash shell")
[root@Shell ~]# array4=(1 2 3 "linux shell" [20]=puppet)
3.查看数组赋值结果[root@Shell ~]# declare -a
[root@Shell ~]# declare -A
4.如何访问数组中的元数[root@Shell ~]# echo ${array1[0]} //访问数组中的第一个元素
[root@Shell ~]# echo {array1[@]} //访问数组中所有数据,相当于echo {array1[*]}
[root@Shell ~]# echo ${#array1[@]} //统计数组元数的个数//了解
[root@Shell ~]# echo ${array1[@]:1} //从数组索引1开始
[root@Shell ~]# echo ${array1[@]:1:2} //从数组索引1开始,访问两个元素
5.如何访问数组中的索引//获取数组元数的索引 [root@Shell ~]# echo ${!array1[@]} 0 1 2 33.关联数组
1.定义关联数组, 申明是关联数据
[root@Shell ~]# declare -A tt_array_1
[root@Shell ~]# declare -A tt_array_2
2.关联数组赋值方式一, 针对每个索引进行赋值#数组名[索引]=变量值
[root@Shell ~]# tt_array1[index1]=pear
[root@Shell ~]# tt_array1[index2]=apple
[root@Shell ~]# tt_array1[index3]=orange
[root@Shell ~]# tt_array1[index4]=peach
3.关联数组赋值方式二, 一次赋多个值[root@Shell ~]# tt_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell')
4.查看关联数组[root@Shell ~]# declare -A
5.访问数据元数[root@Shell ~]# echo ${tt_array2[index2]} //访问数组中的第二个元数 [root@Shell ~]# echo ${tt_array2[@]} //访问数组中所有元数 等同于 echo ${array1[*]} [root@Shell ~]# echo ${!tt_array2[@]} //访问数组中所有元数的索引4.遍历数组
- 1.通过数组元数的个数进行遍历(不推荐)
- 2.通过数组元数的索引进行遍历(推荐)
注意: 将统计的对象作为数组的索引, 仅针对关联数据1.数组赋值与遍历示例
#!/usr/bin/bash #1.使用while读入一个文件 while read line do #2.定义普通数组, 将读入的每行数据,单个单个进行赋值 hosts[++i]=$line done </etc/hosts #3.使用for循环遍历数组, 遍历数组的索引 for i in ${!hosts[@]} do echo "hosts数组对应的索引是:$i, 对应的值是: ${hosts[i]}" done2.使用数组统计文件中的男女性别
//1.准备对应的文件 [root@Shell ~]# cat sex.txt jack m alice f tom m rose f robin m bgx m [root@Shell ~]# cat count_sex.sh #!/usr/bin/bash declare -A sex #1.对数组进行赋值 while read line do #2.取出第二列的内容 type=$(echo $line|awk '{print $2}') #3.定义一个关联数组,让数组的值不断自增 let sex[$type]++ done< sex.txt #4.遍历数组 for i in ${!sex[@]} do echo "$i ${sex[$i]}" done #5.步骤拆分讲解 [root@Shell ~]# declare -A sex [root@Shell ~]# sex=([m]=1 [f]=1) [root@Shell ~]# let sex[m]++ [root@Shell ~]# let sex[f]++ [root@Shell ~]# echo ${!sex[@]} f m [root@Shell ~]# echo ${sex[@]} 3 33.使用数组统计/etc/passwd的shell的数量
[root@Shell ~]# cat array_passwd_count.sh #!/usr/bin/bash declare -A array_passwd #1.对数组进行赋值 while read line do type=$(echo $line|awk -F ':' '{print $NF}') let array_passwd[$type]++ done </etc/passwd #2.对数组进行遍历 for i in ${!array_passwd[@]} do echo 索引是:$i,索引的值是: ${array_passwd[$i]} done4.统计Nginx日志IP访问次数
[root@Shell ~]# cat array_nginx_count.sh #!/usr/bin/bash # nginx log top 10 IP conut declare -A array_nginx #1.给关联数组的索引进行赋值 while read line do type=$(echo $line|awk '{print $1}') let array_nginx[$type]++ done </var/log/nginx/access.log #2.遍历数组 for i in ${!array_nginx[@]} do echo "IP是:$i 出现多少次${array_nginx[$i]}" done5.统计tcp的状态信息
[root@Shell ~]# cat array_ss_state.sh #!/usr/bin/bash declare -A array_state type=$(ss -an |grep :80|awk '{print $2}') #1.对数组进行的索引赋值 for i in $type do let array_state[$i]++ done #2.遍历数组 for j in ${!array_state[@]} do echo "当前的状态是:$j,当前状态出现了多少次:${array_state[$j]}" done
