shell编程之数组

49 阅读2分钟

 定义数组的方法

Shell中,数组用括号来表示,元素用"空格"符号分隔开。

数组包括的数据类型:

  • 数值型
  • 字符型 (如果元素值为字符类型,需要加单引号或双引号,防止单个元素中有空格被当成2个元素)
  • 混合型数值加字符

定义数组格式:

  1. 数组名=(value0 value1 value2 value3 ......)

  2. 数组名=([0]=value [1]=value1 [2]=value2 ....)

  3. 列表名="value0 value1 value2 value3 ...... "

    数组名=($列表名)

  4. 数组名[0]="value1"

    数组名[1]="value2"

    数组名[2]="value3"

引用数组的值

[root@localhost ~]# echo ${!array[*]}
#查看下标 
0 1 2 3 4

[root@localhost ~]# echo ${array[0]}   //获取第一个元素的值
[root@localhost ~]# echo ${array[-1]}   //获取最后一个元素的值  
[root@localhost ~]# echo ${array[-2]}   //获取倒数第二个元素的值


[root@localhost ~]# echo ${a[*]}   //列出所有参数
1 2 3 4 5
[root@localhost ~]# echo ${a[@]}   //@同*
1 2 3 4 5

[root@localhost ~]# echo ${#a[@]}     //前面加#数组的长度
5
[root@localhost ~]# echo ${#a[*]}    
5


数组分片(数组截取)

格式:

 ${数组名[@]:起始位置:截取长度}        //起始位置从0算起
 ​
 ${数组名[@]}           //获取整个数组的元素值
 ${数组名[@]:0:3}      //从下标为0的元素开始截取,共截取3个元素。(即截取元素1到元素3)
 ${数组名[@]:2:2}      //从下标为2的元素开始截取,共截取2个元素。(即截取元素3到

数组元素替换

1、临时替换(不会影响原有数组)

 echo ${数组名[@]/旧字符/新字符}    //会替换所有元素中能匹配到的字符,但这是临时替换,不会改变原有数组的值

示例1:将30替换为100

 [root@yuji ~]# arr2=(10 20 30 40)      //定义数组
 [root@yuji ~]# echo ${arr2[@]}         //查看数组内的所有元素
 10 20 30 40
 [root@yuji ~]# echo ${arr2[@]/30/100}     //将30临时替换为100
 10 20 60 40
 [root@yuji ~]# echo ${arr2[@]}         //不会改变原有数组内的元素值
 10 20 30 40

2、重新赋值(永久替换)

 数组名=(${数组名[@]/旧字符/新字符})

示例:将30重新赋值为200

 [root@yuji ~]# echo ${arr2[@]}
 10 20 30 40
 [root@yuji ~]# arr2=(${arr2[@]/30/200})     //重新赋值
 [root@yuji ~]# echo ${arr2[@]}                   //会改变原有数组的元素值
 10 20 200 40

增加数组内的元素

方法1:数组名[n]=元素值       //使用下标值直接增加元

方法2:数组名+=(元素值)

[root@localhost ~]# echo ${a[@]}  
1 2 3 4 5  
[root@localhost ~]# a+=(6)           //增加元素值6  
[root@localhost ~]# echo ${a[@]}  
1 2 3 4 5 6  
[root@localhost ~]# a+=(7 8 9)       //增加元素值7、8、9  
[root@localhost ~]# echo ${a[@]}  
1 2 3 4 5 6 7 8 9

方法3:数组名[数组长度]=元素值

[root@yuji ~]# cc[${#cc[@]}]=60   //"${#cc[@]"可以获取数组长度

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

[root@yuji ~]# b=(1 2 3)  
[root@yuji ~]# echo ${b[@]}  
1 2 3  
[root@yuji ~]# b=("${b[@]}" 7 8)   //引用数组的所有元素值一定要使用$@,因为加上双引号之后"$@"表示将所有参数当作个体  
[root@yuji ~]# echo ${b[@]}  
1 2 3 7 8  
[root@yuji ~]# echo ${#b[@]}     //数组长度为5  
5  
[root@yuji ~]# b=("${b[*]}" 9)   //如果使用$*,那么数组内的所有元素会被当作一个整体,即被当成一个元素  
[root@yuji ~]# echo ${b[@]}  
1 2 3 7 8 9  
[root@yuji ~]# echo ${#b[@]}     //数组长度为2  
2

删除数组

1、删除数组内的某个元素

 unset 数组名[n]        //删除数组内的某一个元素,n为下标值

示例:

 [root@yuji ~]# echo ${aa[@]}
 10 20 30 40 
 [root@yuji ~]# unset aa[2]           //删除下标值为2的元素
 [root@yuji ~]# echo ${aa[@]}        //30已被删除
 10 20 40

2、删除整个数组

 unset 数组名[*]
 或
 unset 数组名[@] 

查看所有的数组

命令:declare -a