Shell脚本数组简介及运用

目录

一、数组简介

二、数组支持的数据类型

三、定义数组

四、获取数组某个索引处的值

五、遍历数组元素

六、获取数组长度

七、截取数组元素

八、数组的元素替换

1.临时替换

2.永久替换

九、删除元素或数组

十、数组追加元素 

1.满元素数组追加

2.非满元素数组追加

十一、函数使用数组传参


一、数组简介

  1. 数组中可以存放多个值(bash 只支持一维数组)
  2. 数组元素的索引从0开始
  3. 数组在括号内指定数组的值,每个值仅能用空格分割

二、数组支持的数据类型

  • 数值类型
  • 字符串类型(每个字符串值需要使用" " 或 ' '引用起来) 

三、定义数组

数组名=(元素1 元素2 ...)

数组名=([索引1]=元素1 [索引2]=元素2 [索引n]=元素n...)

数组名=($字符串列表变量)

数组名[索引1]=元素1

数组名[索引2]=元素2

...

数组名[索引n]=元素n

[root@localhost1 ~]#vim array.sh
#!/bin/bash
#法一
arr1=(1 2 3 4 5 6)

#法二
arr2=([0]=1 [1]=2 [2]=3 [4]=4)

#法三
arr3list="a b c d e"
arre=($arr3list)

#法四
arr4[0]=a
arr4[1]=b
arr4[2]=c

四、获取数组某个索引处的值

${数组名[索引值]}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
#读取索引为2的值
echo ${arr1[2]}

[root@localhost1 ~]#bash array.sh
30

五、遍历数组元素

${数组名[@]}

${数组名[*]}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)

echo ${arr1[@]}

[root@localhost1 ~]#bash array.sh
10 20 30 40 50 60

六、获取数组长度

${#数组名[@]}

${#数组名[*]}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)

echo ${#arr1[@]}

[root@localhost1 ~]#bash array.sh
6

七、截取数组元素

${数组名[@]:索引值:截取元素个数}

${数组名[*]:索引值:截取元素个数}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)

echo "索引2处截取4个元素为:${arr1[@]:2:4}"

echo "索引0处截取2个元素为:${arr1[@]:0:2}"

echo "索引5处截取1个元素为:${arr1[*]:5:1}"


[root@localhost1 ~]#bash array.sh
索引2处截取4个元素为:30 40 50 60
索引0处截取2个元素为:10 20
索引5处截取1个元素为:60

八、数组的元素替换

1.临时替换

//针对数组中单个元素

${数组名[索引值]/原始字符/替换字符}

//针对数组中所有元素

${数组名[@]/原始字符/替换字符}

${数组名[*]/原始字符/替换字符}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)

echo "替换2为6:${arr1[1]/2/6}"

echo "替换0为1:${arr1[@]/0/1}"

echo "替换10为60:${arr1[@]/10/60}"

[root@localhost1 ~]#bash array.sh
替换2为6:60
替换0为1:11 21 31 41 51 61
替换10为60:60 20 30 40 50 60

2.永久替换

  • 重新定义数组:将需要修改的值手动重写为新的值。
  • 直接修改数组中的元素:数组名[索引值]=修改后的值
  • 将临时替换过的数组重新赋值给原数组:如 array=($array[@]/原始字符/修改后的字符)

九、删除元素或数组

unset ${数组名[索引值]}

unset ${数组名[@]}

unset ${数组名[*]}

[root@localhost1 ~]#array=(1 2 3 4 5 6)

#删除数组索引为2处的元素
[root@localhost1 ~]#unset array[2]
[root@localhost1 ~]#echo ${array[@]}
1 2 4 5 6

#删除数组
[root@localhost1 ~]#unset array[@]
[root@localhost1 ~]#echo ${array[@]}

十、数组追加元素 

判断数组值是否满元素

length=${#arr1[@]}
echo ${arr1[@]}
echo ${arr1[length-1]}

如果有空值,则数组最后一个值不等于元素索引为数组长度-1的元素值

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=([0]=10 [2]=20 [4]=30)
length=${#arr1[@]}
echo ${arr1[@]}
echo ${arr1[length-1]}

[root@localhost1 ~]#bash array.sh
10 20 30
20

1.满元素数组追加

数组名[索引值]=元素

数组名[${#数组名[@]}]=元素

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)

arr1[6]=70

arr1[${#arr1[@]}]=80

echo ${arr1[@]}

[root@localhost1 ~]#bash array.sh
10 20 30 40 50 60 70 80

2.非满元素数组追加

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

        双引号不能省略,否则,当数组array中存在包含空格的元素时会按空格将元素拆分成多个;不能将@替换为*,如果替换为*,不加双引号时与@的表现一致,加双引号时,会将数组array中的所有元素作为一个元素添加到数组中。

数组名+=(元素1 元素2 ...)

        待添加元素必须用"()"包围起来,并且多个元素用空格分隔

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=([0]=10 [2]=20 [4]=30)

arr1=("${arr1[@]}" 40 50)

arr1+=(60 70)

echo ${arr1[@]}

[root@localhost1 ~]#bash array.sh
10 20 30 40 50 60 70

十一、函数使用数组传参

        如果使用位置变量传参,只会传数组的第一个元素,所以需要在函数内部将所以的参数重新组合成一个新的数组变量。

//将一个数组当做参数列表传入函数执行,实现数组值翻倍
[root@localhost1 ~]#vim chuancan.sh
#!/bin/bash
test1() {
  arrlist=($@)    #关键在这里获取数组传入的参数
  for ((i=0;i<${#arrlist[@]};i++))
  do
    newarr[$i]=$[${arrlist[$i]} * 2]
  done
  echo ${newarr[@]}
}
arr=(10 20 30 40 50)
echo "原始数组为:${arr[@]}"

result=$(test1 ${arr[@]})
echo "数组值翻倍后为:$result"

[root@localhost1 ~]#bash chuancan.sh
原始数组为:10 20 30 40 50
数组值翻倍后为:20 40 60 80 100

你可能感兴趣的:(Shell,bash,linux,运维)