数组
数组定义
##方法一
数组名=(value1 value2 value3 ....)
##方法二
数组名=([0]=value [1]=value [2]=value)
##方法三
列表名="value0 value1 value2"
数组名=($列表名)
##方法四
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
数组包括的数据类型
- 数值类型
- 字符类型
在使用字符类型定义时使用 " " 或 ’ ’ 定义
数组元素查看
echo ${array[*]} ##获取数组所有值
echo ${array[@]}
echo ${array[1]} ##获取某个下标的值
echo ${#array[@]} ##统计数组的长度
echo ${!array[@]} ##获取数组的所有元素下标值
如何查看数组是否完整
##方法一
echo ${!arry[@]} ##用查找下标的方法查看
##方法二
##查看数组是否缺少元素
##查看长度减1的值是否为最后一个值,如果不是,即缺少元素
##判断数组是否缺少元素
#!/bin/bash
array=([0]=10 [1]=20 [4]=30)
length=${#array[@]} ##获取数组长度
lastnum=$[length - 1] ##获取数组最后一个元素的下标
lastone=${array[$lastnum]} ##获取数组最后一个元素的值
a=$(echo ${array[@]} | awk '{print $NF}')
##比较数组的最后一个元素的实际值和理论值
if [ "$lastone" == "$a" ];then
echo "数组是完整的"
else
echo "数组不完整"
fi
数组切片
##数组切片
echo ${i:6:3} ##字符切片
echo ${array[@]:1:3} ##数组切片 数组:初始元素下标:获取元素的长度
数组元素替换
##数组元素替换
echo ${array[a]/33/66} ##数组替换
##数组/原元素/替换的元素
##会将所有匹配的元素进行替换,这种替换不会改变原参数
array=(${array[@]/10/60}) ##重新赋值改变原元素
删除数组或数组元素
##删除数组元素
unset array[5]
unset array ##删除数组
数组追加元素
##方法一
array[5]=6 ##在数组的最后下标+1追加
##方法二
array[${#array[@]}]=88 ##利用数组的长度追加
##只适用于元素完整的数组
##方法三
array=("${array[@]}" "value1" "value2")
##此方法 “ ” 不能省略,否则含有空格的元素会有影响
##不能将 @ 换成 * , * 在双引号的情况下,* 会将全部元素看作一个整体
##方法四
array+=("value1" "value2")
将数组传参数到函数
#!/bin/bash
test() {
echo $1
echo $@
newarr=($@)
echo ${newarr[@]} ##将函数外的数组传到函数内,在重新组成一个数组
}
arr=(10 20 30 40)
test ${arr[@]}
在函数中返回数组
#!/bin/bash
test1() {
newarr=($@)
for ((i=0;i<${#newarr[@]};i++))
do
newarr[$i]=$[2 * ${newarr[$i]}]
done
echo ${newarr[@]}
}
arr=(10 20 30)
echo "函数外的数组元素列表为:" ${arr[@]}
arr1=$(test1 ${arr[@]})
echo "新的数组的值为:" ${arr1[@]}
函数名() {
##函数内通过 $@ 获取调用函数时后面跟的所有参数,在函数内组成新的数组
newarr=($@)
....
##对函数内组成的新数组处理后,按照元素的列表格式输出
echo ${newarr[@]}
}
##调用函数时,后面根的参数为数组的元素列表表达式
调用 函数名 ${arr[@]}
##在函数体外,调用函数的表达式组成新的数组
arr=($(函数名 ${arr[@]}))