美文网首页
Bash脚本编程之数组

Bash脚本编程之数组

作者: 小尛酒窝 | 来源:发表于2018-04-11 17:23 被阅读0次

    一、简介

    数组是指将具有相同的数据类型的元素按照一定的顺序排列而成的集合,将类型相同的变量用一个名字命名,然后用索引编号区分它们,这个集合就叫做数组,其索引编号称为数组的下标。

    二、数组的声明

    shell编程中常见的数组格式为:array_name [index] ,其索引下标index从0开始编号,此类数组被称为索引数组,其声明方式为:declare -a array_name
    另一种常见的数组为关联数组,在bash-4之后的版本中,数组支持自定义索引的格式,即可以使用字符串替代传统的数字作为index索引,此类数组被称之为关联数组,其数组格式为:array_name[string],声明方式为:declare -A array_name

    三、数组的赋值与引用

    在shell编程中支持以下几种数组的赋值方式:

    • 1、一次只赋值一个元素,其格式类似于:ARRAY_NAME[INDEX]=VALUE
    • 2、批量赋值,其格式类似于:ARRAY_NAME=("VAR1" "VAR2" "VAR3"....)
    • 3、只给特定的值赋值,如:ARRAY_NAME=([0]="VAR1" [3]="VAR8" [7]="VAR3"....)
    • 4、通过read命令输入数组的值,如下例子:
    [root@localhost tmp]# read -a a
    1 2 3 4 5 6 7 8 hello,world
    [root@localhost tmp]# echo ${a[*]}
    1 2 3 4 5 6 7 8 hello,world
    

    如果想要取消一个数组的赋值,可以利用unset命令取消赋值,如:unset array_name[index]

    数组的引用方式类似于:${array_name[index]},此表示为引用数组中的下标为index的元素,如果没有指定index,值给定数组名,则表示引用下标为0的元素。
    除此之外,数组还有其他几种特殊的引用方式,如:

    ${array_name[*]} 或 ${array_name[@]} 表示引用数组中的所有元素;
    ${#array_name[*]} 或 ${#array_name[@]} 表示数组中的元素个数;
    ${#ARRAY[#]}:第#个元素的字符长度;

    四、使用案例

    • 利用数组对文件进行批量处理
    #!/bin/bash
    declare -a files
    files=(/tmp/*)
    for i in ${files[*]};do
            ls -lh $i | awk '{printf "Files %s owner is %s.\n",$9,$3}'
    done
    [root@localhost tmp]# ./array.sh 
    Files /tmp/anacron owner is root.
    Files /tmp/anacron.sh owner is root.
    Files /tmp/array.sh owner is root.
    Files /tmp/trap.sh owner is root.
    Files /tmp/yum.log owner is root.
    
    • 利用数组比较数值大小:
    #!/bin/bash
    declare -a rand
    declare -i max=0
    
    for i in {0..9};do
            rand[$i]=$RANDOM
            echo ${rand[$i]}
            [ ${rand[$i]} -gt $max ] && max=${rand[$i]}
    done
    
    echo "MAX:$max"
    
    [root@localhost tmp]# ./random.sh 
    11391
    308
    3797
    23745
    4749
    30750
    14709
    14244
    28703
    4955
    MAX:30750
    

    相关文章

      网友评论

          本文标题:Bash脚本编程之数组

          本文链接:https://www.haomeiwen.com/subject/smuihftx.html