shell数组
1、数组分类
普通数组:只能使用整数 作为数组索引 关联数组:可以使用字符串 作为数组索引
2、普通数组
1.方式一, 对每个索引赋值 #数组名[索引]=变量值 # array1[0]=pear # array1[1]=apple 2.方式二, 一次赋多个值 #数组名=(多个变量值) # array1=(tom jack alice) # array2=(`cat /etc/passwd`) # array3=(tom jack alice "bash shell") # array4=(1 2 3 "linux shell" [20]=puppet) 3.查看数组赋值 # declare -a # declare -A 4.访问数组中的元数 # echo ${array1[0]} 访问数组第一个索引的值 # echo ${array1[@]} 访问数组中所有索引的值,== ${array1[*]} # echo ${!array1[*]} 访问数组所有的索引 # echo ${#array1[@]} 统计数组元数的个数
3、关联数组
1.定义关联数组 # declare -A tt_array_1 # declare -A tt_array_2 2.方式一, 针对每个索引进行赋值 #数组名[索引]=变量值 # tt_array1[index1]=pear # tt_array1[index2]=apple 3.方式三, 一次赋多个值 # tt_array2=([index1]=tom [index2]='bash shell') 4.查看关联数组 # declare -A 5.访问数据元数 # echo ${tt_array2[index2]} 访问数组第二个索引的值 # echo ${tt_array2[@]} 访问数组所有索引的值 == ${array1[*]} # echo ${!tt_array2[@]} 访问数组所有的索引
4、遍历数组
遍历数组:推荐通过数组的索引,不推荐通过数组索引的个数。 1.数组赋值与遍历示例 # vim read.sh declare -A x 定义关联数组 while read y 循环读取文件每行,y=每行内容 do let x[$y]++ x='([a]="1" [b]="2" [c]="3" )' y=[a b c] 值=次数 declare -A done <a.txt for i in ${!x[*]} 循环数组的下标 do echo "$i ${x[$i]}" i=下标 x[$i]=下标的值 done 2.统计日志访问量 # vim tongji.sh declare -A x file=$1 while read y 读取每行 do ip=`echo $y |awk '{print $1}'` 取每行第一列 let x[$ip]++ x='([192.168.1.1]="3" [192.168.2.1]]="6" [192.168.3.1]="9" )' done<$file for i in ${!x[*]} 循环数组的下标 do echo "$i ${x[$i]}" i=下标 x[$i]=下标的值 done 3.统计ip连接数 # vim connect.sh declare -A x y=`ss -an|awk '{print $1}'` 监听状态 for i in $y 读取每行 do let x[$i]++ x=([LISTEN]=3 [ESTABLISHED]=6 [TIME_WAIT]=9) done for z in ${!x[@]} 循环数组的下标 do echo "$z ${x[$z]}" z=下标 x[$z]=下标的值 done
5、awk 数组
# ss -an | awk '/9000/{x[$1]++}END{for(i in x)print i,x[i]}' 匹配 行数组 数组下标 下标 值
QQ:328864113 微信:wuhg2008