• Shell脚本数组简介及运用


    目录

    一、数组简介

    二、数组支持的数据类型

    三、定义数组

    四、获取数组某个索引处的值

    五、遍历数组元素

    六、获取数组长度

    七、截取数组元素

    八、数组的元素替换

    1.临时替换

    2.永久替换

    九、删除元素或数组

    十、数组追加元素 

    1.满元素数组追加

    2.非满元素数组追加

    十一、函数使用数组传参


    一、数组简介

    1. 数组中可以存放多个值(bash 只支持一维数组)
    2. 数组元素的索引从0开始
    3. 数组在括号内指定数组的值,每个值仅能用空格分割

    二、数组支持的数据类型

    • 数值类型
    • 字符串类型(每个字符串值需要使用" " 或 ' '引用起来) 

    三、定义数组

    数组名=(元素1 元素2 ...)

    数组名=([索引1]=元素1 [索引2]=元素2 [索引n]=元素n...)

    数组名=($字符串列表变量)

    数组名[索引1]=元素1

    数组名[索引2]=元素2

    ...

    数组名[索引n]=元素n

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. #法一
    4. arr1=(1 2 3 4 5 6)
    5. #法二
    6. arr2=([0]=1 [1]=2 [2]=3 [4]=4)
    7. #法三
    8. arr3list="a b c d e"
    9. arre=($arr3list)
    10. #法四
    11. arr4[0]=a
    12. arr4[1]=b
    13. arr4[2]=c

    四、获取数组某个索引处的值

    ${数组名[索引值]}

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. arr1=(10 20 30 40 50 60)
    4. #读取索引为2的值
    5. echo ${arr1[2]}
    6. [root@localhost1 ~]#bash array.sh
    7. 30

    五、遍历数组元素

    ${数组名[@]}

    ${数组名[*]}

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. arr1=(10 20 30 40 50 60)
    4. echo ${arr1[@]}
    5. [root@localhost1 ~]#bash array.sh
    6. 10 20 30 40 50 60

    六、获取数组长度

    ${#数组名[@]}

    ${#数组名[*]}

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. arr1=(10 20 30 40 50 60)
    4. echo ${#arr1[@]}
    5. [root@localhost1 ~]#bash array.sh
    6. 6

    七、截取数组元素

    ${数组名[@]:索引值:截取元素个数}

    ${数组名[*]:索引值:截取元素个数}

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. arr1=(10 20 30 40 50 60)
    4. echo "索引2处截取4个元素为:${arr1[@]:2:4}"
    5. echo "索引0处截取2个元素为:${arr1[@]:0:2}"
    6. echo "索引5处截取1个元素为:${arr1[*]:5:1}"
    7. [root@localhost1 ~]#bash array.sh
    8. 索引2处截取4个元素为:30 40 50 60
    9. 索引0处截取2个元素为:10 20
    10. 索引5处截取1个元素为:60

    八、数组的元素替换

    1.临时替换

    //针对数组中单个元素

    ${数组名[索引值]/原始字符/替换字符}

    //针对数组中所有元素

    ${数组名[@]/原始字符/替换字符}

    ${数组名[*]/原始字符/替换字符}

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. arr1=(10 20 30 40 50 60)
    4. echo "替换2为6:${arr1[1]/2/6}"
    5. echo "替换0为1:${arr1[@]/0/1}"
    6. echo "替换10为60:${arr1[@]/10/60}"
    7. [root@localhost1 ~]#bash array.sh
    8. 替换26:60
    9. 替换01:11 21 31 41 51 61
    10. 替换1060:60 20 30 40 50 60

    2.永久替换

    • 重新定义数组:将需要修改的值手动重写为新的值。
    • 直接修改数组中的元素:数组名[索引值]=修改后的值
    • 将临时替换过的数组重新赋值给原数组:如 array=($array[@]/原始字符/修改后的字符)

    九、删除元素或数组

    unset ${数组名[索引值]}

    unset ${数组名[@]}

    unset ${数组名[*]}

    1. [root@localhost1 ~]#array=(1 2 3 4 5 6)
    2. #删除数组索引为2处的元素
    3. [root@localhost1 ~]#unset array[2]
    4. [root@localhost1 ~]#echo ${array[@]}
    5. 1 2 4 5 6
    6. #删除数组
    7. [root@localhost1 ~]#unset array[@]
    8. [root@localhost1 ~]#echo ${array[@]}

    十、数组追加元素 

    判断数组值是否满元素

    length=${#arr1[@]}
    echo ${arr1[@]}
    echo ${arr1[length-1]}

    如果有空值,则数组最后一个值不等于元素索引为数组长度-1的元素值

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. arr1=([0]=10 [2]=20 [4]=30)
    4. length=${#arr1[@]}
    5. echo ${arr1[@]}
    6. echo ${arr1[length-1]}
    7. [root@localhost1 ~]#bash array.sh
    8. 10 20 30
    9. 20

    1.满元素数组追加

    数组名[索引值]=元素

    数组名[${#数组名[@]}]=元素

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. arr1=(10 20 30 40 50 60)
    4. arr1[6]=70
    5. arr1[${#arr1[@]}]=80
    6. echo ${arr1[@]}
    7. [root@localhost1 ~]#bash array.sh
    8. 10 20 30 40 50 60 70 80

    2.非满元素数组追加

    数组名=("${数组名[@]}" 元素1 元素2 ...)

            双引号不能省略,否则,当数组array中存在包含空格的元素时会按空格将元素拆分成多个;不能将@替换为*,如果替换为*,不加双引号时与@的表现一致,加双引号时,会将数组array中的所有元素作为一个元素添加到数组中。

    数组名+=(元素1 元素2 ...)

            待添加元素必须用"()"包围起来,并且多个元素用空格分隔

    1. [root@localhost1 ~]#vim array.sh
    2. #!/bin/bash
    3. arr1=([0]=10 [2]=20 [4]=30)
    4. arr1=("${arr1[@]}" 40 50)
    5. arr1+=(60 70)
    6. echo ${arr1[@]}
    7. [root@localhost1 ~]#bash array.sh
    8. 10 20 30 40 50 60 70

    十一、函数使用数组传参

            如果使用位置变量传参,只会传数组的第一个元素,所以需要在函数内部将所以的参数重新组合成一个新的数组变量。

    1. //将一个数组当做参数列表传入函数执行,实现数组值翻倍
    2. [root@localhost1 ~]#vim chuancan.sh
    3. #!/bin/bash
    4. test1() {
    5. arrlist=($@) #关键在这里获取数组传入的参数
    6. for ((i=0;i<${#arrlist[@]};i++))
    7. do
    8. newarr[$i]=$[${arrlist[$i]} * 2]
    9. done
    10. echo ${newarr[@]}
    11. }
    12. arr=(10 20 30 40 50)
    13. echo "原始数组为:${arr[@]}"
    14. result=$(test1 ${arr[@]})
    15. echo "数组值翻倍后为:$result"
    16. [root@localhost1 ~]#bash chuancan.sh
    17. 原始数组为:10 20 30 40 50
    18. 数组值翻倍后为:20 40 60 80 100

  • 相关阅读:
    java透传参数至logback,自定义日志文件名。过期日志文件自动删除
    [ 云计算 | AWS 实践 ] 使用 Java 更新现有 Amazon S3 对象
    介绍一款特别好用的java反编译工具jd-gui
    内容、文档和流程数字化如何支持精益原则
    PCL——Filter
    【linux】线程条件变量 信号量
    自动化测试框架 —— pytest框架入门篇
    【Javascript】$.each方法使用
    【Unity设计模式】✨使用 MVC 和 MVP 编程模式
    c++语言--面试题
  • 原文地址:https://blog.csdn.net/weixin_58544496/article/details/126648004