目录
Shell数组
?数组的表达方式(四种方式)
方法一
方法二
方法三
?方法四
数组包括的数据类型
获取数组长度
?获取数据列表
读取某下标的赋值
数组遍历
数组切片
数组的替换
临时替换
?永久替换
?精确替换
数组的删除
数组追加元素(四种方法)
方法一
方法二
方法三
方法四
向函数传数组参数
从函数返回数组
Shell数组
?数组的表达方式(四种方式)
(30 20 10 60 50 40)
0 1 2 3 4 5 #下标 从0开始
方法一
数组名=(value0 value1 value2 value3 value4 …)
方法二
数组名=([0]=value [1]=value [2] =value...)
?下标2缺失的情况下,其他下标所对应的数值可以输出,只有下标2所对应的数值33不能输出
方法三
列表名= "value0 value1 value2..."
数组名=($列表名)
?方法四
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
数组包括的数据类型
示例:
获取数组长度
格式:
arr_number=(1 2 3 4 5)
arr_length=${#arr_number[*]}
${#arr_number[@] }
echo $arr_length
?示例:数组的长度
?获取数据列表
echo ${arr_number[*]}
echo ${arr_number[@]}
读取某下标的赋值
arr_index2=${arr_number[2]}
echo $arr_index2
?示例:
数组遍历
#!/bin/bash
arr number=(1 2 3 4 5)
for V in ${arr_number[@]}
do
echo $v
done
示例:先定义数组,在利用for循环在数组中取值
?
数组切片
arr=(12345)
echo ${arr[@] } #输出整个数组
echo ${arr[@]:0:2} #获取${ 数组名[@或*]:起始位置:长度}的值
echo ${arr1[*]:1:3}
echo ${arr[@] :2:3}
示例:
数组的替换
注意:数组的替换需要谨慎使用,防止替换错误
arr=(12345)
echo ${arr[@]/4/66}#${数组名[@或*]/查找字符/替换字符}
echo ${arr[@]} #并不会替换数组原有内容
arr=(${arr[@]/4/66}) #要实现改变原有数组,可通过重新赋值实现
echo ${arr[@] }
临时替换
?永久替换
?精确替换
数组的删除
arr=(12345)
unset arr #删除数组
echo ${arr[*]}
arr=(12345)
unset arr [2] #删除第三个元素
echo ${arr[*] }
示例:
?
数组追加元素(四种方法)
方法一
array_ name [ index] =value
方法二
array_ name[${ #array_ name[@]}]=value
方法三
array_ name= ("${array_ name[@]}" value1 ... valueN)
双引号不能省略,否则,当数组array_ name中存在包含空格的元素时会按空格将元素拆分成多个
不能将“g”替换为“*”, 如果替换为“*", 不加双引号时与“@”的表现一致,加双引号时,会将数组
array_ name中的所有元素作为一个元索添加到数组中
for i in "${array_ name[@]}"; do echo $i; done
当数组中存在包含空格的元素时会按空格将元素拆分成多个
[root@localhost ~]# array5=(${array4[*]})
[root@localhost ~]# echo ${array5[*]}
zhang san li si wang wu zhao liu
[root@localhost ~]# echo ${#array5[*]}
8
不能将"@"替换为"*",如果替换为"*",不加双引号时与"@"的表现一致,加双引号时,会将数组中的所有元素作为一个元素添加到数组中
[root@localhost ~]# array5=("${array4[*]}")
[root@localhost ~]# echo ${array5[*]}
zhang san li si wang wu zhao liu
[root@localhost ~]# echo ${#array5[*]}
1
正确写法:
[root@localhost ~]# array4=("zhang san" "li si" "wang wu" "zhao liu")
[root@localhost ~]# array4=("${array4[@]}" "qian qi" "zhu ba")
[root@localhost ~]# echo ${array4[*]}
zhang san li si wang wu zhao liu qian qi zhu ba
[root@localhost ~]# echo ${#array4[*]}
6
方法四
array_ name+= (value1 . . .valueN)
待添加元素必须用“()"包围起来,并且多个元素用空格分隔
[root@localhost ~]# array4+=("nan jing" "dong tai")
[root@localhost ~]# echo ${array4[*]}
zhang san li si wang wu zhao liu qian qi zhu ba nan jing dong tai
[root@localhost ~]# echo ${#array4[*]}
8
向函数传数组参数
如果将数组变量作为函数参数,函数只会取数组变量的第一个值。
格式:
test1() {
echo "接收到的参数列表:$@"
newarrary=($1)
echo "新数组的值为:${newarrary[*]}"
}
######## main ########
array=(3 2 1 4 5)
echo "原始数组的值为:${array[*]} "
test1 $array
在函数外把数组传递到函数内
函数外
函数名 ${数组名[@]?}
使用 ${数组名[@]?} 获取数组的列表,在用这个列表作为参数给函数传递
函数内
使用 $@ 接收参数列表,在用 数组名=($@) 在函数内生成一个数组
示例:利用函数获取数组值,并算出数组中所有数的和
?
?
从函数返回数组
test3() {
? ? ?newarrary=(`echo $@`)
? ? ?sum=0
? for S in ${newarrary[*]}
? do
? ? ?sum=$[$sum + $S]
? done
? ? ? ?echo $sum
}
test4() {
? ? ? ?newarrary=(`echo $@`)
? ? ? for ((i=0; i<=$[$# - 1]; i++))
? ? ? do
? ? ? ? ? newarrary[$i]=$[${newarrary[$i]} * 2]
? ? ? ?done
? ? ? ? ? echo ${newarrary[*]}
? ? ? }
arr=(10 20 30 40 50)
? ? ? echo "原始数组的值为:${arr[*]}"
result1=`test3 ${arr[*]}`
? ? ? ? echo "新数组的和为:$result1"
示例:
?
|