美文网首页
Linux——在shell脚本中定义和使用数组

Linux——在shell脚本中定义和使用数组

作者: moutory | 来源:发表于2023-06-17 22:11 被阅读0次

    前言

    我们在写shell脚本的时候,有时候会需要对多台服务器,或者相近的几个资源做同样的操作。一般情况下我们会考虑使用for循环来解决这些问题,而作为for循环的资源对象,我们一般会放在数组中进行操作。在本篇文章中,我们将对shell脚本中数组的定义和使用进行介绍。

    一、数组的定义

    数组的定义有三种方式

    语法一:使用( )进行包裹(常用)
    arr=(aa bb cc)
    
    语法二:使用()+[]进行定义(少用)

    语法二的优点是可以顺便定义元素的位置,但写法相对比较繁琐一点。

    arr=([0]=aa [1]=bb [2]=cc)
    
    语法三:手动定义元素值

    这种语法的优点是可以逐个定义元素的位置和内容

    arr[0]=aa
    arr[1]=bb
    arr[2]=cc
    
    语法四:引入外部的数据作为数组的内容

    需要结合$()命令来将命令执行结果作为数组的内容

    arr=$(ls /tmp/)
    

    二、数组的操作

    (一)获取数组中的某个元素的值

    语法:${数组变量名[索引坐标]}

    案例:
    #!/bin/bash
    
    echo "====================="
    arr=(aa bb cc)
    echo "${arr[1]}"
    echo "====================="
    

    结果如下:

    [root@10-60-159-92 testssh]# sh test.sh
    =====================
    bb
    =====================
    
    (二)获取数组中所有元素

    这个语法能够和for循环配合,完成我们操作数组元素的操作。

    语法:${数组变量名[@]}或者${数组变量名[*]}

    案例:
    [root@10-60-159-92 testssh]# cat test.sh
    #!/bin/bash
    
    echo "====================="
    arr=(aa bb cc)
    echo "${arr[*]}"
    echo "${arr[@]}"
    echo "====================="
    
    [root@10-60-159-92 testssh]# sh test.sh
    =====================
    aa bb cc
    aa bb cc
    element is aa
    element is bb
    element is cc
    =====================
    
    (三)获取数组中的元素个数

    语法:${#数组变量名[@]}或者${#数组变量名[*]}

    案例:
    #!/bin/bash
    
    echo "====================="
    arr=(aa bb cc)
    echo "${#arr[*]}"
    echo "${#arr[@]}"
    echo "====================="
    

    结果如下:

    [root@10-60-159-92 testssh]# sh test.sh
    =====================
    3
    3
    =====================
    
    (四)数组(元素)的删除

    语法:unset 数组变量名 或者 unset 数组变量名[索引下标]

    案例:
    #!/bin/bash
    
    echo "====================="
    arr=(aa bb cc)
    unset arr[1]
    echo "${arr[@]}"
    unset arr
    echo "${arr[@]}"
    echo "====================="
    

    结果如下,可以看到原坐标索引为1的元素已经被删除了。

    [root@10-60-159-92 testssh]# sh test.sh
    =====================
    aa cc
    
    =====================
    
    
    (五)数组元素的截取和替换

    元素截取语法:${数组变量名[@]:起始索引下标:结束索引下标}
    元素替换语法:${数组变量名[@]/旧元素值/新元素值}

    案例:
    #!/bin/bash
    
    echo "====================="
    arr=(aa bb cc dd)
    
    echo "${arr[@]:1:2}"
    echo "${arr[@]/bb/pp}"
    echo "${arr[@]}"
    echo "====================="
    
    

    执行结果如下,我们可以发现这两个命令并不会改变原有的数组,而是会生成新的数组

    [root@10-60-159-92 testssh]# sh test.sh
    =====================
    bb cc
    aa pp cc dd
    aa bb cc dd
    =====================
    
    (六)遍历数组所有元素

    遍历数组中的元素,一般我们会结合for命令来实现。常见的实现方式有两种,for infor (( ))

    方法一:for in
    #!/bin/bash
    echo "====================="
    arr=(aa bb cc dd)
    
    for var in ${arr[@]}
    do
        echo "element is $var"
    done
    echo "====================="
    
    方法二:for (( ))
    #!/bin/bash
    
    echo "====================="
    arr=(aa bb cc dd)
    for ((i=0;i<${#arr[@]};i++))
    do
        echo "element is ${arr[i]}"
    done
    echo "====================="
    

    PS:需要注意,上述的${#arr[@]}换成${#arr[*]}也是同样适用的~

    相关文章

      网友评论

          本文标题:Linux——在shell脚本中定义和使用数组

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