shell中的数组

shell中的数组

列表的表达方式

“10 20 30 40 50 …”

数组的定义方法

数组的表达方式

表达方式(元素) (20 40 50 10 100 60 …)

索引下标 0 1 2 3 4 5 …

方法一:

数组名=(value0 value1 value2 value3 value4 …)

array=(10 20 30 40 50)

方法二:

数组名=([0]=value [1]=value [2]=value …)

[]内代表元素的下标,可以精确的控制每个元素的值

array1=([0]=11 [1]=12 [2]=13 [3]=14 [4]=15 )

方法三:

列表名=“value0 value1 value2 value3…”

数组名=($列表名)

liebiao="12  34 55 66 11 25"
array2=($liebiao)

方法四:

数组名[0]=“value”

数组名[1]=“value1”

数组名[2]=“value2”

数组名[3]=“value3”

array3[0]=10
array3[1]=14
array3[2]=16
array3[3]=17
array3[4]=11
array3[5]=12

数组的输出

array=(10 20 30 40 50)
echo ${array[*]}
#获取整个数组
echo ${array[@]}
#获取整个数组

echo ${#arrary[*]}
#获取数组的长度

echo ${arry[2]}
#获取数组中某个下标的值

在这里插入图片描述

用for来检查数组是否完整

array1=([0]=11 [1]=12 [2]=13 [3]=14 [5]=15 )
length=${#array[*]}
echo $length
for ((i=0; i<=$length; i++))
do
  echo ${array[$i]}
  echo "第 ${$i+1} 个元素的值为:${array[$i]}"
done

数组包括的数据类型

  • 字符类型(使用 “” 或者 ‘’ 来定义)
  • 数值类型

数组的切片(分割)

${i:num:length} #对数值列表进行切片

echo ${array[*]:1:3}
#对数组进行切片*代表全数组,1表示从下标1开始,3表示切片长度为3

数组值的替换

echo ${array[*]/30/60}
#注替换的是所有对应字符,元素内有相应字符也会被替换,且只替换匹配到的第一个字符,且为临时替换。

array=(${array[*]/10/60})
#永久替换,直接重新定义

array[2]=100
#精确替换某个元素的值

数组的删除

array=(11 2 3 5 66 77)
unset array
# 删除数组
unset array[1]
# 删除数组中对应下标的元素值

数组追加元素

方法一

array=(11 2 3 5 6 78)

array[6]=70
#追加下标和值

方法二

array=(11 2 3 5 6 78)
array[${#array[*]}]=70
#按照数组长度往后追加

array1=([0]=11 [1]=12  [3]=14 [4]=15 )
array[${#array[*]}]=70
#若数组缺值,那么追加的值会覆盖上一个值

在这里插入图片描述

方法三

array=("${array[@]}" value1 ....valuen)
#直接重新定义数组,""不能少,不然当数组中存在含space的值时,数组会将其拆分
#不能将"@"替换为"*",@会将数组中的值当成个体存在,而*会将其中的值当成一个整体看待。

方法四

array+=(....)
# 待添加元素必须用"()"包围起来,并且多个元素用空格分隔

向函数传数组参数

如果将数组变量作为函数参数,函数只会取数组变量的第一个值。

test1(){
  echo "接收到的参数列表:$@"
  newarrary=($1)
  echo "新数组的值为: ${newarrary[*]}"
  array=(3 2 1 4 5)
  echo "原始数组的值为:|${array[* ] }"test1 $array

向函数传数组参数步骤

#在函数外把数组传递到数组内

函数名 ${数组名[@]}
# 获取数组的列表,再使用这个列表作为参数给函数传递

#函数内部

使用 $@ 接收参数列表
在用数组名=($@)  在函数内生成一个新的数组

#利用函数获取数组值,并算出数组中所有数的和


#!/bin/bash

test2() {
  newarray=($@)
  #echo "函数中新数组的值为: ${newarray[@]}"
  sum=0
  for v in $(echo ${newarray[@]})
  do
    let sum+=$v
  done
  echo $sum
}
#############  main   ##########
array=(10 20 30 50 60)
#echo "原数组array的值为: ${array[@]}"
#test2 ${array[@]}
res1=$(test2 ${array[@]})
echo "和为 $res1"

在这里插入图片描述
在这里插入图片描述

#!/bin/bash
#输入一个列表,求出列表中所有数的和
test1() {
  newarr=($@)
  sum=0
  for v in $(echo ${newarr[@]})
  do
    let sum+=$v
  done
  echo $sum
}

######## main ########
read -p "请输入需要相加的列表:" list
arr=($list)
echo "原数组arr的值为:${arr[@]}"
res1=$(test1 ${arr[*]})
echo "函数中新数组的所有元素的累加和为:$res1"
[root@localhost ~]# bash array.sh
请输入需要相加的列表:10 20 30 40 50
原数组arr的值为:10 20 30 40 50
函数中新数组的所有元素的累加和为:150

#利用函数获取数组值,并算出所有数的翻倍
#!/bin/bash
test1() {
  newarr=($@)
  length=${#newarr[*]}

  for ((i=0; i<$length; i++))
  do
    newarr[$i]=$[${newarr[$i]} * 2]
  done
  echo "${newarr[*]}"
}

######## main ########
read -p "请输入需要相加的列表:" list
arr=($list)
echo "原数组arr的值为:${arr[@]} "
res1=($(test1 ${arr[*]}))
echo "函数中新数组的所有元素的翻倍后为:${res1[*]}"
[root@localhost ~]# bash array.sh
请输入需要相加的列表:10 20 30 40 50
原数组arr的值为:10 20 30 40 50 
函数中新数组的所有元素的翻倍后为:20 40 60 80 100
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值