shell数组
一、数组概述
1.数组的概念
是一种容器,可以同时存放多个数据值。
2.数组的特点
1.数组是一种引用数据类型。
2.数组当中的多个数据,类型 必须统一。
3.数组长度在程序运行期间不可改变。
3.数组定义方法
方法1
数组名=(value0 value1 value2 …)
方法2
数组名=([0]=value [1]=value [2]=value …)
方法3
列表名=“value0 value1 value2 …”
数组名=($列表名)
方法4
数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”
二、数组包括的数据类型
1.数据类型
(1)数值类型
(2)字符类型(字符串)
使用" " 或 ’ ’ 定义,防止元素当中有空格,元素按空格分割
2.获取数组长度
arr_number=(1 2 3 4 5)
echo ${#arr_number[*]} 或 echo ${#arr_number[@]}
3.获取数据列表
echo ${arr_number[*]}
或
echo ${arr_number[@]}
4.读取某个下标赋值
arr_index2=${arr_number[2]}
echo $arr_index2
三、使用数组
1.数组遍历,循环中使用数组
#!/bin/bash arr=(10 20 30 40 50 60 ) for i in ${arr[@]} do echo $i done
2.数组切片
arry=(1 2 3 4 5 6) echo ${arry[*]} echo ${arry[@]} #输出整个数组,此处*与@相同 echo ${arry[@]:0:2} #获取 ${数组名[@或*]:起始位置:长度} 的值 echo ${arry[@]:2:2} echo ${arry[@]:3:4}
3.数组替换
方法一:替换所有符合条件的
格式:${数组名[*或@]/源参数值/将要替换的参数值}
arr2=(1 2 3 4 5) #临时替换:将数组arr1中的参数值3替换为66,但原来的数组中的参数值并不会改变 echo ${arr2[*]/3/66} echo ${arr2[*]} #永久替换:可通过重新赋值实现 arr2=(${arr2[*]/3/66}) echo ${arr2[*]}
方法二:替换单个,指定下标替换。
arry=(1 2 3 4 5 6) echo ${arry[*]} arry[0]=7 echo ${arry[*]}
4.数组删除
格式:unset 数组名[索引] #删除单个
unset 数组名 #删除整个数组
5.数组追加元素
方法一:单个添加
arr=(1 2 3 4 5 6 7) echo ${arr[6]} arr[7]=8 arr[8]=9 echo ${arr[*]}
方法二:增加数组长度填加
arr4=(1 2 3 4 5 6 7) echo ${arr4[*]} arr4[${#arr4[*]}]=8 #根据长度添加参数 echo ${arr4[*]}
方法三:重新定义数组
arr4=(1 2 3 4 5 6 7) echo ${arr4[*]} arr4=("${arr4[@]}" 8 9 10) #加上新参数重新定义数组 echo ${arr4[*]}
双引号不能省略,否则数组中存在包含空格的元素时会按空格将元素拆分成多个
不能将“@”替换为“*”,如果替换为“* ”,不加双引号时与“@”的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中
6.函数返回数组
#!/bin/bash #用于求数组中所有元素的累加和 test2 () { newarr1=($@) arrlist=${newarr1[*]} sum=0 for i in $arrlist do sum=$[$sum+$i] done echo $sum }
#用于把原数组中所有元素值乘以2后生成一个新的数组并输出
test3 () { newarr2=($@) length=${#newarr2[@]} for ((j=0;j<$length;j++)) do newarr2[$j]=$[${newarr2[$j]} * 2] done echo ${newarr2[*]} } ######main###### arry=(10 20 30 40 50) echo "原数组的列表为:${arry[@]}" res1=`test2 ${arry[@]}` echo "test1中的新数组的累加和为:$res1"
【参考文档】
原文链接:https://blog.csdn.net/weixin_55613232/article/details/116988585