• 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]}'
                    匹配   行数组       数组下标       下标 值
    

                                       

                   

     

  • 相关阅读:
    SPOJ 8093 JZPGYZ
    UVA1030 Image Is Everything
    UVA11996 Jewel Magic
    UVA11922 Permutation Transformer
    UVA1479 Graph and Queries
    P3224 [HNOI2012]永无乡
    UVA11020 Efficient Solutions
    UVA12206 Stammering Aliens
    UVA11107 Life Forms
    UVA11019 Matrix Matcher
  • 原文地址:https://www.cnblogs.com/wuhg/p/13410536.html
Copyright © 2020-2023  润新知