方法3示例:数组名[数组长度]=元素值
[root@yuji ~]# echo ${cc[@]} 10 20 30 40 50 [root@yuji ~]# cc[${#cc[@]}]=60 //"${#cc[@]"可以获取数组长度 [root@yuji ~]# echo ${cc[@]} 10 20 30 40 50 60 复制代码
网络异常,图片无法展示
|
方法4示例:数组名=("${数组名[@]}" 元素1 元素2 .....)
#示例1 [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 #示例2 [root@yuji ~]# e=("li si") //当元素类型为字符时,一定要加引号,避免单个元素中有空格被当成2个元素 [root@yuji ~]# echo ${e[@]} li si [root@yuji ~]# echo ${#e[@]} 1 [root@yuji ~]# e=("${e[@]}" "wang wu" "zhao liu") //引用数组的元素值时一定要使用双引号,因为单引号无法引用变量值 [root@yuji ~]# echo ${e[@]} li si wang wu zhao liu [root@yuji ~]# echo ${#e[@]} 3 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
4.5 使用for遍历输出数组的每个元素值
1、通过数组内的所有元素来遍历。
[root@yuji ~]# arr=(30 20 40 10 50) [root@yuji ~]# echo ${arr[@]} 30 20 40 10 50 [root@yuji ~]# for i in ${arr[@]};do echo $i;done 30 20 40 10 50 复制代码
网络异常,图片无法展示
|
2、通过下标值来遍历,这种方法可能会由于数组内元素不完整,某个下标对应的元素值为空。
[root@yuji ~]# echo ${arr[@]} 30 20 40 10 50 [root@yuji ~]# length=${#arr[@]} [root@yuji ~]# for ((i=0;i<=length-1;i++)) > do > echo ${arr[$i]} > done 30 20 40 10 50 复制代码
网络异常,图片无法展示
|
4.6 查看所有的数组
命令:declare -a
[root@yuji ~]# declare -a //查看所有的数组 declare -a BASH_ARGC='()' declare -a BASH_ARGV='()' declare -a BASH_LINENO='()' declare -a BASH_SOURCE='()' declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")' declare -a DIRSTACK='()' declare -a FUNCNAME='()' declare -a GROUPS='()' declare -a PIPESTATUS='([0]="0")' declare -a arr='([0]="30" [1]="20" [2]="40" [3]="10" [4]="50")' declare -a arr2='([0]="10" [1]="20" [2]="200" [3]="40")' declare -a b='([0]="1 2 3 7 8" [1]="9")' [root@yuji ~]# declare -a | grep "b" //过滤出数组b declare -a b='([0]="1 2 3 7 8" [1]="9")' 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
5 将数组的值传给函数
操作步骤:
第一步:向函数传入数组的时候需要先把数组转换成列表作为函数的参数使用: 函数名 ${数组名1[@]} 第二步:在函数内把传入的列表重新组合成数组: 数组名2=($@) 第三步:在函数外重新组合成数组: 数组名3=(`函数名 ${数组名1[@]}`) 复制代码
示例1:获取数组的数据列表作为函数的参数使用
#!/bin/bash fun01 () { #不能写$1,否则只会输出数组的第一个元素 echo "函数接收到的参数为:$@" #在函数内把传入的列表重新组合成数组 newarr=($@) echo "新数组的值为:${newarr[@]}" } #### main #### arr=(1 2 3 4 5) echo "原数组的值为:${arr[@]}" #把数组转换成列表作为函数的参数使用 fun01 ${arr[@]} 复制代码
网络异常,图片无法展示
|
示例2:使用for循环,令新数组内的每个元素值乘2
方法一:i<=数组长度减1
#!/bin/bash fun02 () { #在函数内把传入的列表重新组合成数组 newarr=($@) echo "新数组的值为:${newarr[@]}" # ${#newarr[@]} 为数组的长度 for ((i=0;i<=${#newarr[@]}-1;i++)) do newarr[$i]=$[${newarr[$i]}*2] done echo "每个元素值翻倍后为:${newarr[@]}" } #### main #### arr=(1 2 3 4 5) echo "原数组的值为:${arr[@]}" #把数组转换成列表作为函数的参数使用 fun02 ${arr[@]} 复制代码
网络异常,图片无法展示
|
方法二:i<=参数个数减1
$# 表示调用函数时函数后面跟的参数个数
#!/bin/bash fun03 () { #在函数内把传入的列表重新组合成数组 newarr=($@) echo "新数组的值为:${newarr[@]}" # $#表示调用函数时函数后面跟的参数个数 for ((i=0;i<=$[$#-1];i++)) do newarr[$i]=$[${newarr[$i]}*2] done echo "每个元素值翻倍后为:${newarr[@]}" } #### main #### arr=(1 2 3 4 5) echo "原数组的值为:${arr[@]}" #把数组转换成列表作为函数的参数使用 fun03 ${arr[@]} 复制代码
网络异常,图片无法展示
|
示例3:把数组的所有元素通过函数求出累加和
把原数组的所有元素传入函数变成新数组后,再求出累加和。
vim shu1.sh #!/bin/bash myfun () { newarr=($@) sum=0 for i in ${newarr[@]} do sum=$[sum+i] done echo "数组内所有元素的累加和是:$sum" } ##### main ###### arr=(3 1 4 2 6 5) myfun ${arr[@]} 复制代码
网络异常,图片无法展示
|