Shell数组

本文详细介绍了Linux shell脚本中数组的创建、遍历、修改、删除等操作,包括下标定义法、列表定义法、直接下标法等,并展示了如何获取数组长度、进行数组元素的增删改查以及遍历。此外,还讲解了数组的分片、数值传递以及数组的累加求和等实用技巧,是学习shell脚本数组操作的实用指南。
摘要由CSDN通过智能技术生成

0、字符串、列表、数组

"a b c d"           字符串
"a" "b" "c" "d"     列表
("a" "b" "c" "d")  数组

1、数组定义方法

列表输出方式
--------------------
列表名="10 20 40 60"
echo $列表名
--------------------
列表名=("a" "b" "c" "d")      如果值为字符类型,需要加双引号或单引号
echo ${列表名[*]}

1.1、小括号法

数组名=(value0  value1  value2)
echo ${数组名[*]}
echo ${数组名[@]}
--------------------------------
#直接输出下标
[root@localhost ~]# array1=(10 20 30 40 50)
[root@localhost ~]# echo ${array1[*]}
10 20 30 40 50
[root@localhost ~]# echo ${array1[@]}
10 20 30 40 50
--------------------------------

1.2、列表定义法

 

#将列表转换为下标
[root@localhost ~]# list1="10 20 30 40"
[root@localhost ~]# arry2=($list1)
[root@localhost ~]# echo ${arry2[@]}
10 20 30 40

 

1.3、下标定义法

[root@localhost ~]# array3=([0]=20 [1]=30 [3]=40 [4]=40)
[root@localhost ~]# echo  ${array3[*]}
20 30 40 40

 

1.4、直接下标法

-----------------------------------------
[root@localhost ~]# arry4[0]=10
[root@localhost ~]# arry4[1]=20
[root@localhost ~]# arry4[3]=30
[root@localhost ~]# arry4[4]=40
[root@localhost ~]# echo ${arry4[*]}
10 20 30 40

 

2、获取数组长度

大括号前加# echo ${#array[*]} / echo ${#array[@]}

echo ${#array[*]}  
echo ${#array[@]}

3、数组操作

3.1、增

添加数组值
array[下标]=值
---------------------------------------------------
[root@localhost ~]# array1=([0]=10 [1]=20 [3]=40)
[root@localhost ~]# echo ${array1[*]}
10 20 40
[root@localhost ~]# array1[2]=0              增加
[root@localhost ~]# echo ${array1[*]}
10 20 0 40 
--------------------------------------------------
末尾追加数组值 array+=(  )
--------------------------------------------------
[root@localhost ~]# array=(10 20 30 40 50)
[root@localhost ~]# array+=(70 80 90)
[root@localhost ~]# echo ${array[*]}
10 20 30 40 50 70 80 90
[root@localhost ~]# 
----------------------------------------------------
array[${#array[*]}]=100    法二,追加数值100
但是少元素或删去元素,只会替换最后的数值
----------------------------------------------------
array=("${array[@]}"  500 600)   法三,这里必须用@,相对于"$@",都看作个体

[root@localhost ~]# array=(10 20 30 40 50)
#这里必须加" ",不然遇到li si会拆分成两个
[root@localhost ~]# array=("${array[@]}" 500 600)  
[root@localhost ~]# echo ${array[*]}
10 20 30 40 50 500 600
[root@localhost ~]# 

3.2、删

删除单个数
-------------------------------------
[root@localhost ~]# array=(10 20 30 40 50)
[root@localhost ~]# echo ${array[*]}
10 20 30 40 50
[root@localhost ~]# unset array[3]
[root@localhost ~]# echo ${array[3]}

[root@localhost ~]# 
-------------------------------------

删除整个数组
--------------------------------------
[root@localhost ~]# unset array[*]
[root@localhost ~]# echo ${array[*]}

[root@localhost ~]# 

3.3、改

字符替换,不考虑整个元素值,但是只是临时替换,不影响原来数组值
---------------------
[root@localhost ~]# array=(10 20 30 40 50)
[root@localhost ~]# echo ${array[@]/0/00}
100 200 300 400 500
[root@localhost ~]# echo ${array[@]}     不影响原来数组值
10 20 30 40 50
[root@localhost ~]# 
----------------------

永久替换    给替换加括号,重新定义即可
----------------------
[root@localhost ~]# array2=(${array[@]/0/00})
[root@localhost ~]# echo ${array2[@]}
100 200 300 400 500

3.4、查

输出某一个值
-------------------------------
echo ${array[数字]}
-------------------------------
如果定义数组缺少数字,则单个无法获取
输出最后元素的值
-------------------------------
array=(10 20 30 40 50)
length=${#array[*]}      数组长度
last=$[length -1]
echo ${array[$last]}
--------------------------
echo  ${array[-1]}

 用法:

  • 用于判断是否数组完整,如果最后元素不符合,说明含有空值

  • 利于数组长度作为最后下标,也能判断

4、数组遍历

4.1、下标for循环法

#!/bin/bash

array=(10 20 30 40 50)
length=${#array[*]}
for((i=0;i<=length-1;i++))
do
  echo ${array[$i]}
done

 4.2、直接for循环法

#!/bin/bash

array=(10 20 30 40 50)
for i in ${array[*]}
do
  echo $i
done

 

5、数组的分片

字符串分片 echo ${字符串: 起始 :长度}

echo ${array[*]:起始:长度}
---------------------------------------
[root@localhost ~]# array=(10 20 30 40 50)
[root@localhost ~]# echo ${array[*]:2:3}
30 40 50

6、数值传参

三步曲:

  • 输入函数:利于函数参数,把数组转换为列表 函数名 ${array[@]}

  • 函数内重组在函数把列表内重新合成数组 数组名2=($@)

  • 输入函数:函数外重新组合成数组 数组名3=(函数名 $数组名1[@])

利于$@收集全部数组值,利于${array[@]}将数组转换为列表

#!/bin/bash

myfun()
{
  #2、利于$@收集使用参数,如果使用$1只能收集数组第一位数值
  echo "函数接收到的参数为: $@"
  newarry=($@)
  echo "新数组的值为:${newarry[@]} "
  #############################   数组元素*2,变成两倍
  for((i=0;i<=$[$#-1];i++))       $#-1为长度
  do
    newarry[$i]=$[${array[$i]}*2]  元素变成两倍
  done
  echo ${newarry[@]}               输出数组结果
  #############################
}


####main####
array=(3 1 4 2 6 5)
echo "原来数组的值为: ${array[@]}"
myfun ${array[@]}   #1、利于${array[@]},将列表作为参数,这里也可以用*
###############
result=(`myfun ${array[*]}`)   #3、将数组转换为列表 作为函数参数传给新变量result    
echo "函数处理后的数组的值为:${result[@]}"    将新变量作为数组展开使用

 

7、数组累加求和

#!/bin/bash

test01()
{
  #2、把函数内传入的列表重新组合成为数组
  newarry=($@)
  sum=0
  for i in ${newarry[@]}
  do
     sum=$[sum+i]
  done
  echo "数组所有元素的累加和为:$sum"
}

####main####
array=(10 20 30 40 50 60)
#1、将数组转换为列表作为函数的参数使用 --》${array[@]}
test01 ${array[@]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值