• [ SHELL编程 ] 数组、关联数组和awk数组


      本文主要对shell编程中常用的数组、关联数组和awk数组定义、操作以及注意事项做个总结,并提供具体案例。

    数组

      数组定义:一对圆括号表示数组,数组元素之间用空格符号分割。

    Array=(val1 val2 val3)

      数组操作:包括获取长度,数组元素查询、增加、删除、修改,获取数组下标

    #获取数组长度
    ${#Array[@]} #Arr表示数组名,下同
    ${#Array[*]}
    
    #获取数组元素
    ${Array[@]} #获取数组全部元素
    ${Array[*]} #同上
    ${Array[0]} #获取数组指定位置元素,下标从0开始
    ${Array[*]:1:2} #获取指定范围的数组元素
    
    #增加数组元素
    Array[2]=oracle  #原数组不存在下标为2
    
    #修改数组元素
    Array[2]=oracle  #原数组存在下标为2,注意与增加方式的区别
    
    #删除数组元素
    unset Array[1] #带下标则为清除指定位置元素
    unset Array #不带下标,清除全部数据
    
    #替换操作,不会修改原数组元素
    ${Array[@]/oracle/root}
    
    #获取数组下标
    ${!Array[@]}

    关联数组

      数组定义:与普通数组区别就是可以用字符串作为数组下标,定义方式为用declare -A声明变量。

    declare -A Array

      数组操作:与普通数组相同,重点描述下编程中常用的根据指定的下标获取元素。关联数组默认输出的顺序是无序的。

    for key in ${!Array[*]}
    do
     echo "The value of ${key} is ${Array[$key]}"
    done

    awk数组

      数组定义:默认为关联数组,下标可以是数字或者字符串,且不需要申明,可直接使用。特别一点是awk可以用split生成数组

    #通过split函数间接生成数组
    awk 'BEGIN{info="I LOVE CHINA";split(info,Array," ");}' #split为awk内置函数,info表示字符串,Array表示生成数组," "表示分隔符
    
    #直接生成数组
    awk 'BEGIN{for(i=0;i<=2;i++)Array[i]=i;}'

      数组操作:部分操作与上述不同,下面描述一下

    #获取数组长度
    awk 'BEGIN{for(i=0;i<=2;i++)Array[i]=i;print length(Array)}' #调用内置函数length获取
    awk 'BEGIN{info="I LOVE CHINA";len=split(info,Array," ");print len}' #split函数返回数组长度

    操作实例

       1、tcp端口状态统计

    $ netstat -an | awk '/^tcp/ {++Arr[$NF]} END {for(a in Arr) print a, Arr[a]}'
    LISTEN 17
    ESTABLISHED 54
    SYN_SENT 2

      2、将用户和用户家目录保存到数组,后续可根据用户名获取家目录。可根据具体场景修改如下代码

    #!/bin/bash
    
    [ -f file.unl ] && rm file.unl
    awk -F':' '{print $1,$6}' /etc/passwd | head -n 3 > file.unl #only for test
    declare -A Arr
    while read col1 col2
    do
      Arr[${col1}]=${col2}
    done < file.unl
    
    for user in ${!Arr[@]}
    do
      printf "The directory of ${user} is ${Arr[${user}]}
    "
    done

    输出:

    The directory of bin is /bin
    The directory of daemon is /sbin
    The directory of root is /root
  • 相关阅读:
    Java 源码 Byte
    Git 常用命令add
    Mybatis Doc Configuration XML
    Java 源码 Integer
    Java 源码 Boolean
    Java 知识 fair and nonfair 锁
    Java 源码 Character
    Windows 窗口 左上角 有一个 “NO DC” 字样,一些 WPF 的应用显示有问题 的 解决办法
    java中判断对象属性值是否为空的函数 工具类
    Oracle跨库清洗数据数据
  • 原文地址:https://www.cnblogs.com/linyfeng/p/7670186.html
Copyright © 2020-2023  润新知