Advertisement

【shell】shell脚本实战-shell数组

阅读量:

文章目录


  • 数组的概念

  • 对数组的基本理解

  • 数组引用方法

  • 实际应用案例

  • 基于索引进行切分的操作

  • 元素替换操作

    • 总结
数组的定义

在Markdown格式下

在 Shell 语言中,采用圆括号**( )**的形式来表示数组,并以空格分隔各元素。从而得出,数组的通用定义形式为:
array=(value01 value02 … valuen)

注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。

数组的简单介绍

下面是一个定义数组的实例:

复制代码
    nums=(29 100 13 8 91 44)
    
    
      
    
    代码解读

Shell 是弱类型的,它并不要求所有数组元素的类型必须相同,例如:

复制代码
    arr=(20 56 "http://www.baidu.com")
    
    
      
    
    代码解读

从属于另一个类别的是第三个元素。前两个元素均为整数,在此情况下,则第三个元素则是一个字符串。

Shell 数组的长度不是固定的 ,定义之后还可以增加元素。

举个例子来说,在处理 nums 数组时(其长度为 6),通过以下代码段,在列表末尾添加一个元素后(其总长度变为 7):

复制代码
    nums[6]=88
    
    
      
    
    代码解读

除此之外,你也无需逐一为数组中的每个元素赋值;代码中只需对特定的元素进行赋值:

复制代码
    ages=([3]=24 [5]=19 [10]=12)
    
    
      
    
    代码解读

以上代码就只给第 3、5、10 个元素赋值,所以数组长度是 3。

数组的引用

获取数组元素的值,一般使用下面的格式:

复制代码
    ${array_name[index]}
    
    array_name为数组的名称
    index为属组元素下标
    
    
      
      
      
      
    
    代码解读

其中,array_name 是数组名,index 是下标。例如:

复制代码
    n=${nums[2]}
    
    
      
    
    代码解读

表示获取 nums 数组的第二个元素,然后赋值给变量 n。再如:

复制代码
    echo ${nums[3]}
    
    
      
    
    代码解读

表示输出 nums 数组的第 3 个元素。

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

复制代码
    ${nums[*]}
    或
    ${nums[@]}
    两者都可以得到nums数组的所有元素
    
    
      
      
      
      
    
    代码解读
数组使用举例

实例一:

复制代码
    [root@ecs-c13b ~]# cat sz.sh 
    #!/bin/bash
    nums=(29 100 13 8 91 44)
    echo ${nums[@]}  #输出所有数组元素
    nums[10]=66  #给第10个元素赋值(此时会增加数组长度)
    echo ${nums[*]}  #输出所有数组元素
    echo ${nums[4]}  #输出第4个元素
    
    输出结果: 
    
    [root@ecs-c13b ~]# bash sz.sh 
    29 100 13 8 91 44
    29 100 13 8 91 44 66
    91
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

示例二:
找出一组数据中的最大数,这组数据用数组保存。

复制代码
    #!/bin/bash
    
    array=(1 2 3 4 5 6 7 8 9 0 11 10 19 18)
    
    max=${array[0]} 
    index=${#array[*]}
    
    for i in `seq 1 $index`
    do
    	if [  $max -lt  $[array[$i]] ];then
    		max=${array[$i]}
    	fi
    done
    echo $max
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
数组的切片与替换
1. 根据索引切片
复制代码
    array=(1 2 3 4 5)
    
    echo ${array[@]:0:3}	#从第一个元素开始,截取3个
    
    echo ${array[@]:1:4}	#从第二个元素开始,截取4个
    
    echo ${array[@]:0-3:2}	#从倒数第三个元素开始,截取两个
    
    
      
      
      
      
      
      
      
    
    代码解读
2. 数组替换

替换的是元素

复制代码
    [root@ mysql-master ~]# array=(1 2 3 4 5)
    [root@ mysql-master ~]# echo ${array[@]/3/100}
    1 2 100 4 5
    
    [root@ mysql-master ~]# array=(${array[@]/4/200})
    [root@ mysql-master ~]# echo ${array[@]}
    1 2 3 200 5
    
    
      
      
      
      
      
      
      
    
    代码解读
总结

shell的数组在脚本中如果运用得当,也是一个很好的工具。

全部评论 (0)

还没有任何评论哟~