目录
一、数组简介
二、数组支持的数据类型
三、定义数组
四、获取数组某个索引处的值
五、遍历数组元素
六、获取数组长度
七、截取数组元素
八、数组的元素替换
1.临时替换
2.永久替换
九、删除元素或数组
十、数组追加元素
1.满元素数组追加
2.非满元素数组追加
十一、函数使用数组传参
一、数组简介
-
数组中可以存放多个值(bash 只支持一维数组)
-
数组元素的索引从0开始
-
数组在括号内指定数组的值,每个值仅能用空格分割
二、数组支持的数据类型
-
数值类型
-
字符串类型(每个字符串值需要使用" " 或 ' '引用起来)
三、定义数组
数组名=(元素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=([0]=10 [2]=20 [4]=30)
length=${#arr1[@]}
echo ${arr1[@]}
echo ${arr1[length-1]}
[root@localhost1 ~]#bash array.sh
10 20 30
20
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