shell script 数组使用[定义、遍历、函数传参]

前言

在编写 shell script 时候,有时需要定将数组作为参数传递函数。
下面是将和 shell 中数组相关的知识点做一个简单的梳理,方便后面查阅。

shell 数组定义

数组定义主要有下面几种方式:

declare -a arrayOfPort        #定义一个数组,名字是arrayOfPort
arrayOfPort[0]=21; arrayOfPort[1]=23; arrayOfPort[2]=80; arrayOfPort[3]=8080  #即array[key]=value形式
arrayOfPort=(21 23 80 8080)   #直接初始化
arrayOfPort=([0]=21 [1]=23 [2]=80 [4]=8080)

arrayOfPort="21 23 80 8080"   #定义字符串
echo ${arrayOfPort[0]}        #可以把arrayOfPort变量当作数组来处理
echo ${arrayOfPort[@]}        #可以把arrayOfPort变量当作数组来处理
echo ${arrayOfPort[*]}        #可以把arrayOfPort变量当作数组来处理

获取数组元素

${arrayOfPort[0]}${arrayOfPort[1]}     #获取数组元素
str=${arrayOfPort[*]}                    #以空格分隔各数组字符串

str=aa" "bbb" "cccc; arrayOfStr=($str);  #空格分隔的字符串转换成数组,不太推荐
echo ${#arrayOfStr[@]};                  #获取arrayOfStr数组长度 3
echo ${arrayOfStr[@]};                   #输出arrayOfStr数组内容 aa bbb cccc

str=$(ls ./); arrayOfDir=($str)          #可以把 `ls`,`find` 等命令的返回值转换成数组
arrayOfDir=($(ls ./))                    #和上面一行命令等价

获取数组长度

获取数组长度的方法主要有下面几种:

arrayOfPort=(21 23 80 8080)   #定义并初始化arrayOfPort

${#arrayOfPort[@]}            #获取数组arrayOfPort个数
${#arrayOfPort[*]}            #获取数组arrayOfPort个数

删除数组元素

arrayOfPort=(21 23 80 8080)   #定义并初始化arrayOfPort

unset arrayOfPort[1]          #删除数组arrayOfPort中第一个元素
unset arrayOfPort             #删除整个arrayOfPort数组

遍历数组元素

下面已 for 循环举例来看下如何遍历数组元素。

#!/bin/sh
#Traversing the array of arrayOfPort

##################################
# main function define
##################################
main()
{
    local param=0

    arrayOfPort=(21 23 80 8080)
    #arrayOfPort[0]=21; arrayOfPort[1]=23; arrayOfPort[2]=80; arrayOfPort[3]=8080 
    #arrayOfPort=([0]=21 [1]=23 [2]=80 [4]=8080)
    echo -e "arrayOfPort is "
    for i in ${arrayOfPort[*]}
    do
        echo -e "${i} "
    done

    return $param
}

main $@

上面的例子执行结果为:

[root@localhost ~]# ./arrayOfPort.sh
arrayOfPort is
21
23
80
8080

数组作为函数参数

个别场景需要将数组作为参数,传递给函数。

#!/bin/sh
#Traversing the array of arrayOfPort by function

##################################
# foo function define
##################################
foo()
{
    local param=0
    
    echo -e "print the array "
    
    local localArrayOfPort=${1}
    for i in ${localArrayOfPort[*]}
    do
        echo -e "${i} "
    done
    
    return $param
}

##################################
# main function define
##################################
main()
{
    local param=0

    arrayOfPort=(21 23 80 8080)
    #arrayOfPort[0]=21; arrayOfPort[1]=23; arrayOfPort[2]=80; arrayOfPort[3]=8080 
    #arrayOfPort=([0]=21 [1]=23 [2]=80 [4]=8080)
    echo -e "print the arrayOfPort"
    
    #foo $arrayOfPort         #这样子传参,只是将arrayOfPort[数组名]称传递过去,而不是数组本身。
    foo "${arrayOfPort[*]}"   #正确的写法

    return $param
}

main $@

上面的例子执行结果为:

[root@localhost ~]# ./arrayOfPort.sh
print the arrayOfPort
print the array
21
23
80
8080
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值