• 【Shell脚本5】Shell数组


    Shell数组

    数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

    与大部分编程语言类似,数组元素的下标由 0 开始。

    Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

    array_name=(value1 value2 ... valuen)
    
    • 1

    创建一个简单的数组 my_array:

    #!/bin/bash
    
    my_array=(A B "C" D)
    
    • 1
    • 2
    • 3

    我们也可以使用数字下标来定义数组:

    array_name[0]=value0
    array_name[1]=value1
    array_name[2]=value2
    
    • 1
    • 2
    • 3

    读取数组

    读取数组元素值的一般格式是:

    ${array_name[index]}
    
    • 1

    以下实例通过数字索引读取数组元素:

    #!/bin/bash
    my_array=(A B "C" D)
    
    echo "第一个元素为: ${my_array[0]}"
    echo "第二个元素为: ${my_array[1]}"
    echo "第三个元素为: ${my_array[2]}"
    echo "第四个元素为: ${my_array[3]}"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    执行脚本,输出结果如下所示:

    $ chmod +x test.sh 
    $ ./test.sh
    第一个元素为: A
    第二个元素为: B
    第三个元素为: C
    第四个元素为: D
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    关联数组

    Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。

    关联数组使用 declare 命令来声明,语法格式如下:

    declare -A array_name
    
    • 1

    -A 选项就是用于声明一个关联数组。

    关联数组的键是唯一的。

    以下实例我们创建一个关联数组 site,并创建不同的键值:

    declare -A site=(["google"]="www.google.com" ["runoob"]="www.runoob.com" ["taobao"]="www.taobao.com")
    
    • 1

    我们也可以先声明一个关联数组,然后再设置键和值:

    declare -A site
    site["google"]="www.google.com"
    site["runoob"]="www.runoob.com"
    site["taobao"]="www.taobao.com"
    
    • 1
    • 2
    • 3
    • 4

    也可以在定义的同时赋值:

    访问关联数组元素可以使用指定的键,格式如下:

    array_name["index"]
    
    • 1

    以下实例我们通过键来访问关联数组的元素:

    declare -A site
    site["google"]="www.google.com"
    site["runoob"]="www.runoob.com"
    site["taobao"]="www.taobao.com"
    
    echo ${site["runoob"]}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行脚本,输出结果如下所示:

    www.runoob.com
    
    • 1

    获取数组中的所有元素

    使用 @ 或 * 可以获取数组中的所有元素,例如:

    #!/bin/bash
    my_array[0]=A
    my_array[1]=B
    my_array[2]=C
    my_array[3]=D
    
    echo "数组的元素为: ${my_array[*]}"
    echo "数组的元素为: ${my_array[@]}"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    执行脚本,输出结果如下所示:

    $ chmod +x test.sh 
    $ ./test.sh
    数组的元素为: A B C D
    数组的元素为: A B C D
    
    • 1
    • 2
    • 3
    • 4
    declare -A site
    site["google"]="www.google.com"
    site["runoob"]="www.runoob.com"
    site["taobao"]="www.taobao.com"
    
    echo "数组的元素为: ${site[*]}"
    echo "数组的元素为: ${site[@]}"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    执行脚本,输出结果如下所示:

    $ chmod +x test.sh 
    $ ./test.sh
    数组的元素为: www.google.com www.runoob.com www.taobao.com
    数组的元素为: www.google.com www.runoob.com www.taobao.com
    
    • 1
    • 2
    • 3
    • 4

    在数组前加一个感叹号 ! 可以获取数组的所有键,例如:

    declare -A site
    site["google"]="www.google.com"
    site["runoob"]="www.runoob.com"
    site["taobao"]="www.taobao.com"
    
    echo "数组的键为: ${!site[*]}"
    echo "数组的键为: ${!site[@]}"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    执行脚本,输出结果如下所示:

    数组的键为: google runoob taobao
    数组的键为: google runoob taobao
    
    • 1
    • 2

    获取数组的长度

    获取数组长度的方法与获取字符串长度的方法相同,例如:

    #!/bin/bash
    my_array[0]=A
    my_array[1]=B
    my_array[2]=C
    my_array[3]=D
    
    echo "数组元素个数为: ${#my_array[*]}"
    echo "数组元素个数为: ${#my_array[@]}"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    执行脚本,输出结果如下所示:

    $ chmod +x test.sh 
    $ ./test.sh
    数组元素个数为: 4
    数组元素个数为: 4
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    二造考生必看|巩固优选题库助力考生最后冲刺
    Mybatis中SQL注入攻击的3种方式
    设计模式:享元模式(C++实现)
    冰冰学习笔记:new与delete
    深度学习基础--神经网络(2)
    flutter 打包apk
    LeetCode常见题型——链表
    html制作小猪佩奇卡通图案代码,使用HTML和CSS3绘制基本卡通图案的示例分享
    字符驱动开发2
    springMvc42-处理静态资源
  • 原文地址:https://blog.csdn.net/qq11771258/article/details/133767636