一、数组简介
数组 是 shell 中的一种基础数据类型,用来存储大量数据。但是实际使用环境中,其实用到的并不像其他变成语言中那么多,主要是因为shell主要是为了完成一些简单的任务,并不需要太复杂的代码。但是,作为一种编程语言,了解其基础数据类型是很有必要的。
二、数组定义的两种方式
2.1、普通数组
直接在数组中添加元素,不需要申明。只能通过数字进行索引取值。
1)定义
[root@localhost ~]# a=(1 2 3 4 5 6 7 )
2) 取值
[root@localhost ~]# echo ${a[3]} #取出索引为3对应位置的值 4 [root@localhost ~]# echo ${a[*]} #取出所有元素 1 2 3 4 5 6 7 [root@localhost ~]# echo ${a[@]} #取出所有元素 1 2 3 4 5 6 7 [root@localhost ~]# echo ${!a[@]} #取出所有索引 0 1 2 3 4 5 6
3)建立数组的另一种方式,通过赋值。
[root@localhost ~]# b[0]=10 [root@localhost ~]# b[1]=4 [root@localhost ~]# b[3]=6 [root@localhost ~]# echo ${b[@]} 10 4 6
2.2、关联数组
关联数组需要使用关键字先声明,然后在创建
1)定义
[root@localhost ~]# declare -A bb [root@localhost ~]# bb=([index1]=python [index2]=shell)
2) 取值
[root@localhost ~]# echo ${bb[index1]} python [root@localhost ~]# echo ${bb[index2]} shell [root@localhost ~]# echo ${bb[*]} python shell [root@localhost ~]# echo ${bb[@]} python shell [root@localhost ~]# echo ${!bb[@]} index1 index2
3) 通过赋值创建
[root@localhost ~]# declare -A c [root@localhost ~]# c[name]=huahua [root@localhost ~]# c[age]=18 [root@localhost ~]# echo ${c[name]} huahua [root@localhost ~]# echo ${c[age]} 18
三、数组切片操作
1、普通数组切片,遵循顾头不顾尾的原则,
[root@localhost ~]# b[0]=10 [root@localhost ~]# b[1]=4 [root@localhost ~]# b[3]=6 [root@localhost ~]# echo ${b[@]:1:2} 4 6 [root@localhost ~]# echo ${b[@]:1:4} 4 6 [root@localhost ~]# echo ${b[@]:0:3} 10 4 6 [root@localhost ~]# echo ${b[@]:0:1} 10
2、关联数组切片
不支持使用关联索引进行切片,而只能使用数字索引进行切片
[root@localhost ~]# declare -A info [root@localhost ~]# info[age]=18 [root@localhost ~]# info[name]=love2 [root@localhost ~]# info[skill]=python [root@localhost ~]# echo ${info[@]} love2 18 python [root@localhost ~]# echo ${info[@]:0:1} love2 [root@localhost ~]# echo ${info[@]:0:2} love2 18 [root@localhost ~]# echo ${info[@]:0:3} love2 18 python
四、数组应用
4.1使用数组打印hosts文件,貌似有点无聊
#!/bin/bash i=0 while read line do hostarray[i++]=$line done </etc/hosts for j in ${!hostarray[*]} do echo ${hostarray[$j]} done
4.2、使用数组进行统计
4.2.1) 生成统计文件
[root@centos ~]# cat > ha.txt <<-EOF jh m nj f ki m lk m uh f EOF
4.2.2)使用命令统计
[root@localhost ~]# awk '{print $2}' ha.txt|sort|uniq -c|sort -rn 3 m 2 f
4.2.3)使用数组进行统计
#!/bin/bash declare -A array_count while read line do type=$(echo $line|awk '{print $2}') let array_count[$type]++ done<ha.txt for i in ${!array_count[*]} do echo "$i 次数为:${array_count[$i]}" done #执行结果 [root@localhost ~]# bash a2.sh f 次数为:2 m 次数为:3
4.3、统计不同账户的数量
4.3.1)、使用命令统计
[root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd|sort|uniq -c|sort -n 1 /bin/sync 1 /sbin/halt 1 /sbin/shutdown 6 /bin/bash 22 /sbin/nologin
4.3.2)、使用数组进行统计
#!/bin/bash declare -A user_array while read line do type=`echo $line|awk -F ':' '{print $NF}' ` let user_array[$type]++ done</etc/passwd for i in ${!user_array[*]} do echo " 用户类型为:$i,该类型用户个数为:${user_array[$i]}" done #执行结果 [root@localhost ~]# bash a3.sh 用户类型为:/sbin/nologin,该类型用户个数为:22 用户类型为:/bin/sync,该类型用户个数为:1 用户类型为:/bin/bash,该类型用户个数为:6 用户类型为:/sbin/shutdown,该类型用户个数为:1 用户类型为:/sbin/halt,该类型用户个数为:1
来源:https://www.cnblogs.com/hjnzs/p/12298407.html