• shell 数组


    引子:

      在执行 find /opt/work/testDdir -name 'file*' 时,有可能会返回多个结果。将会返回的结果保存在变量中,需要对其做 [ -r $findResult ] 的处理时,就会报错  binary operator expected 。

      于是,开始尝试一种方法,可以处理这样类似的报错。而且,在需要输出时,也便于控制输出格式。

      Bash 提供了对一维数组(索引数组、关联数组)的支持。

    1.创建数组


      当出现这样的定义时,默认创建索引数组,形如:name[subscript]=value

    res[i]=$item

      使用 declare 声明一个索引数组

    declare -a res

      一次性,为数组所有成员赋值,亦可创建关联数组

    file=(1 2 3 4 5 6 7 8 9)

      关联数组的声明

    declare -A file

    2.数组的使用


      获取数组长度:${#Array[@]}

    max=${#res[@]}

      成员变量引用格式:${name[subscript]}

    # 遍历数组元素
    max=${#res[@]}
    for((i=0; i<max; i++)); do
            printf "%s
    " "${res[$i]}"
    done

      引用时,不使用数组下标,默认等于使用 [0] 。

    $ printf "${res}"
    /opt/work/testDir/file6

     

    3.两者差异


      关联数组的下标可以是个字符串

    $ declare -A develop
    $ develop['yt']="yangtao"
    $ develop['mtf']="matnfei"
    $ develop['mh']="mahan"
    $ printf "length of develop: %d
    " "${#develop[@]}"
    length of develop: 3
    $ printf "%s
    " "${develop['yt']}"
    yangtao
    $ printf "%s
    " "${develop['mtf']}"
    matnfei
    $ printf "%s
    " "${develop['mh']}"
    mahan

      倘若是索引数组,使用字符串时,就成了这个样子

    $ declare -a develop
    $ develop['yt']="yangtao"
    $ develop['mtf']="matnfei"
    $ develop['mh']="mahan"
    $ printf "length of develop: %d
    " "${#develop[@]}"
    length of develop: 1
    $ printf "%s
    " "${develop['yt']}"
    mahan
    $ printf "%s
    " "${develop['mtf']}"
    mahan
    $ printf "%s
    " "${develop['mh']}"
    mahan

     

    4.使用实例


      处理一组相同的任务时,数组是个好东东。检查一下是否存在多个rpm包,……

    command=(tar bz2 md5sum)
    
    maxLength=${#command[@]}
    for((i=0; i<maxLength; i++)); do
            rpm -q ${command[$i]}
            echo $?
    done

       执行脚本效果:

    [view@file ma]$ . lib/chkCommand
    tar-1.26-29.el7.x86_64
    0
    package bz2 is not installed
    1
    package md5sum is not installed
    1
    一切代码都是为了生活,一切生活都是调剂
  • 相关阅读:
    [收集]Grid Animation-01
    陕西航天大学横幅动态测试
    IPC机制
    Android使用权限
    DDMS
    看懂UML类图和时序图
    Frameworks detected: Android framework is detected in the project
    CoordinatorLayout父布局的Behavior
    Android权限记录
    AndroidManifest.xml文件中属性记录
  • 原文地址:https://www.cnblogs.com/argor/p/7920153.html
Copyright © 2020-2023  润新知