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

前言

我们在写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[*]}也是同样适用的~

posted @ 2023-06-18 22:11  moutory  阅读(1900)  评论(0编辑  收藏  举报  来源