Shell 编程-Shell 数组你学会了吗?

今天给伙伴们分享一下Shell 编程-Shell 数组,希望看了有所收获。

我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!

如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。

1、什么是数组

  • Shell 的数组就是把有限个元素(变量或字符内容)用一个名字命名,然后用编号对它们进行区分的元素集合,这个名字就称为数组名,用于区分不同内容的编号就称为数组下标。
  • 组成数组的各个元素(变量)称为数组的元素,有时也称为下标变量。
  • 有了Shell数组后,就可以用相同名字引用一系列变量及变量值,并通过数字(索引)来识别使用它们。
  • 在许多场合,使用数组可以缩短和简化程序开发。
  • 数组的本质还是变量,是特殊的变量形式

2、数组的操作

1、 数组的定义
  • 方法一:用小括号将变量值括起来赋值给数组变量,每个变量值之间要用空格分隔
[[email protected] ~]# array=(value1 value2 value3 ... )
# 示例:
[[email protected] ~]# array=(1 2 3)    # 用小括号将数组内容赋值给数组变量,数组元素用“空格”分隔开。
[[email protected] ~]# echo ${array[*]} # 输出上面定义的数组的所有元素值,注意语法。
  • 方法二:用小括号将变量值括起来,同时采用键值对的形式赋值
[[email protected] ~]# array=([0]=one [1]=two [3]=three [4]=four)
  • 方法三:通过分别定义数组变量的方法来定义
[[email protected] ~]# arry[0]=one
[[email protected] ~]# arry[1]=two
[[email protected] ~]# arry[2]=three
[[email protected] ~]# arry[3]=four
[[email protected] ~]# echo ${arry[@]} # 查看所有数组的值
one two three four
  • 方法四:动态地定义数组变量,并使用命令的输出结果作为数组的内容
array=($(命令))
array=(`命令`)
# 示例:a
[[email protected] ~]# array=(`ls ./`)a
[[email protected] ~]# echo ${array[@]}
10.sh 172.16.1.7 1.sh 2.sh 3.sh 4.sh 5.sh 6.sh 7.sh 8.sh access_2010-12-8.log rsync.sh
2、数组中常用变量
${ARRAY_NAME[*]}          # 引用数组中的所有元素
${ARRAY_NAME[@]}          # 引用数组中的所有元素
${ARRAY_NAME[INDEX]}      # 引用数组中的元素 注意:引用时,只给数组名,表示引用下标为0的元素
${
   
    
    #ARRAY_NAME[*]}         # 数组中元素的个数
${
   
    
    #ARRAY_NAME[@]}         # 数组中元素的个数
${
   
    
    #ARRAY_NAME}            # 数组中下标为 0 的元素的字符个数
${
   
    
    #ARRAY_NAME[INDEX]}     # 数组中下标为 INDEX 的元素的字符个数
3、数组的打印
[[email protected] ~]# array=(one two three)
[[email protected] ~]# echo ${array[0]}   # 打印单个数组元素用${数组名[下标]},当未指定数组下标时,数组的下标是从0开始。
one
[[email protected] ~]# echo ${array[1]}
two
[[email protected] ~]# echo ${array[2]}
three
[[email protected] ~]# echo ${array[*]}   # 使用*或者@可以得到整个数组内容。
one two three
[[email protected] ~]# echo ${array[@]}   # 使用*或者@可以得到整个数组内容。
one two three
4、数组元素的个数的打印
[[email protected] ~]# echo ${array[*]}   # 使用*或者@可以得到整个数组内容。
one two three
[[email protected] ~]# echo ${#array[*]}  # 用${#数组名[@或*]}可以得到数组长度࿰