Shell脚本数组简介及运用(你是我始料不及的遇见,也是我突如其来的欢喜)

一、数组简介

1.数组中可以存放多个值(bash 只支持一维数组)
数组元素的索引从0开始
2.数组在括号内指定数组的值,每个值仅能用空格分割

二、数组支持的数据类型

  • 数值类型
  • 字符串类型(每个字符串值需要使用" " 或 ’ '引用起来)

三、定义数组

数组名=(元素1 元素2 …)
数组名=([索引1]=元素1 [索引2]=元素2 [索引n]=元素n…)
数组名=($字符串列表变量)
数组名[索引1]=元素1
数组名[索引2]=元素2

数组名[索引n]=元素n

[root@localhost1 ~]#vim array.sh
#!/bin/bash
#法一
arr1=(1 2 3 4 5 6)
 
#法二
arr2=([0]=1 [1]=2 [2]=3 [4]=4)
 
#法三
arr3list="a b c d e"
arre=($arr3list)
 
#法四
arr4[0]=a
arr4[1]=b
arr4[2]=c

四、获取数组某个索引处的值

${数组名[索引值]}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
#读取索引为2的值
echo ${arr1[2]}
 
[root@localhost1 ~]#bash array.sh
30

五、遍历数组元素

${数组名[@]}
${数组名[*]}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
 
echo ${arr1[@]}
 
[root@localhost1 ~]#bash array.sh
10 20 30 40 50 60

六、获取数组长度

${#数组名[@]}
${#数组名[*]}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
 
echo ${#arr1[@]}
 
[root@localhost1 ~]#bash array.sh
6

七、截取数组元素

${数组名[@]:索引值:截取元素个数}
${数组名[*]:索引值:截取元素个数}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
 
echo "索引2处截取4个元素为:${arr1[@]:2:4}"
 
echo "索引0处截取2个元素为:${arr1[@]:0:2}"
 
echo "索引5处截取1个元素为:${arr1[*]:5:1}"
 
 
[root@localhost1 ~]#bash array.sh
索引2处截取4个元素为:30 40 50 60
索引0处截取2个元素为:10 20
索引5处截取1个元素为:60

八、数组的元素替换

1.临时替换

//针对数组中单个元素
${数组名[索引值]/原始字符/替换字符}
//针对数组中所有元素
${数组名[@]/原始字符/替换字符}
${数组名[*]/原始字符/替换字符}

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
 
echo "替换2为6:${arr1[1]/2/6}"
 
echo "替换0为1:${arr1[@]/0/1}"
 
echo "替换10为60:${arr1[@]/10/60}"
 
[root@localhost1 ~]#bash array.sh
替换2为6:60
替换0为1:11 21 31 41 51 61
替换10为60:60 20 30 40 50 60

2.永久替换

  • 重新定义数组:将需要修改的值手动重写为新的值。
  • 直接修改数组中的元素:数组名[索引值]=修改后的值,
  • 将临时替换过的数组重新赋值给原数组:如 array=($array[@]/原始字符/修改后的字符)

九、删除元素或数组

unset ${数组名[索引值]}
unset ${数组名[@]}
unset ${数组名[*]}

[root@localhost1 ~]#array=(1 2 3 4 5 6)
 
#删除数组索引为2处的元素
[root@localhost1 ~]#unset array[2]
[root@localhost1 ~]#echo ${array[@]}
1 2 4 5 6
 
#删除数组
[root@localhost1 ~]#unset array[@]
[root@localhost1 ~]#echo ${array[@]}
 

十、数组追加元素

判断数组值是否满元素
length=${#arr1[@]}
echo ${arr1[@]}
echo ${arr1[length-1]}
如果有空值,则数组最后一个值不等于元素索引为数组长度-1的元素值

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=([0]=10 [2]=20 [4]=30)
length=${#arr1[@]}
echo ${arr1[@]}
echo ${arr1[length-1]}
 
[root@localhost1 ~]#bash array.sh
10 20 30
20

1.满元素数组追加

数组名[索引值]=元素
数组名[${#数组名[@]}]=元素

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
 
arr1[6]=70
 
arr1[${#arr1[@]}]=80
 
echo ${arr1[@]}
 
[root@localhost1 ~]#bash array.sh
10 20 30 40 50 60 70 80

2.非满元素数组追加

数组名=(“${数组名[@]}” 元素1 元素2 …)
双引号不能省略,否则,当数组array中存在包含空格的元素时会按空格将元素拆分成多个;不能将@替换为*,如果替换为*,不加双引号时与@的表现一致,加双引号时,会将数组array中的所有元素作为一个元素添加到数组中。
数组名+=(元素1 元素2 …)
待添加元素必须用"()"包围起来,并且多个元素用空格分隔

[root@localhost1 ~]#vim array.sh
#!/bin/bash
arr1=([0]=10 [2]=20 [4]=30)
 
arr1=("${arr1[@]}" 40 50)
 
arr1+=(60 70)
 
echo ${arr1[@]}
 
[root@localhost1 ~]#bash array.sh
10 20 30 40 50 60 70

十一、函数使用数组传参

如果使用位置变量传参,只会传数组的第一个元素,所以需要在函数内部将所以的参数重新组合成一个新的数组变量。

//将一个数组当做参数列表传入函数执行,实现数组值翻倍
[root@localhost1 ~]#vim chuancan.sh
#!/bin/bash
test1() {
  arrlist=($@)    #关键在这里获取数组传入的参数
  for ((i=0;i<${#arrlist[@]};i++))
  do
    newarr[$i]=$[${arrlist[$i]} * 2]
  done
  echo ${newarr[@]}
}
arr=(10 20 30 40 50)
echo "原始数组为:${arr[@]}"
 
result=$(test1 ${arr[@]})
echo "数组值翻倍后为:$result"
 
[root@localhost1 ~]#bash chuancan.sh
原始数组为:10 20 30 40 50
数组值翻倍后为:20 40 60 80 100
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值