变量:只能存一个值,数组可以存多个值
(1)普通数组,索引下标是整数:
1)定义:
方法一:一次赋一个值;语法:数组名[下标]=变量值
array[1]=linux array[2]=shell 方法二:一次赋多个值;数组名=(变量值1 变量值2) arrar1=(linux shell awk openstack [20]=docker)2)引用:获取数组索引变量
语法:echo ${数组名[索引]}
echo ${books[3]}(2)关联数组,索引下标是字符串:
1)定义关联数组:
语法:declare -A 数组名; 数组名=([索引]=变量值)
declare -A info1info1=([name]=jack [sex]=male [age]=28 [height]=170 [skill]=cloud) #info1是数组名,[name]:是数组索引下标; jack是数组元素
(3)访问数组元素:
访问数组中的元素:echo ${数组名[索引]}; echo ${info1[name]}
访问数组中的所有元素:echo ${数组名[@]} 等同于echo ${数组名[*]} 统计数组的元素的个数:echo ${#数组名[@]} 获取数组的索引:echo ${!数组名[@]} #非常重要(4)遍历数组:通过数组索引遍历元素;把要统计的对象作为数组的索引
- 例1:遍历数组:while方式
#!/bin/bashwhile read linedo hosts[i++]=$linedone
- 例2:遍历数组,for循环
#!/bin/bashold_IFS=$IFSIFS=$'\n'for line in $(cat /etc/hosts)do hosts[++i]=$linedonefor i in ${!hosts[@]}do echo "$i:${hosts[$i]}"doneIFS=$old_IFS
- 例3:统计性别
#!/bin/bashdeclare -A sexwhile read line do type=$(echo $line|awk '{print $2}') let sex[$type]++done
# cat sex.txt jack01 mjack02 fjack03 mjack04 f
- 例4:统计shell种类
#!/bin/bashdeclare -A countwhile read line do type=$(echo $line|awk -F ':' '{print $NF}') let count[$type]++done
- 例5:统计tcp连接状态数量
#!/bin/bashwhile truedo unset tcp_count declare -A tcp_count type=$(ss -an | grep :80 | awk '{print $2}') for i in $type do let tcp_count[$i]++ done for j in ${!tcp_count[@]} do echo "$j:${tcp_count[$j]}" done sleep 1 cleardone