shell - 函数

函数定义

函数的定义格式如下:

[ function ] func() {
    # actions
    [ return [$result] ]
}

注意:

1、关键字function,可以带可以不带,建议带上 2、不需要给出形参列表 3、return语句可以不要;也可以直接return,后面不加任何内容;也可以return后面加一个对象 4、函数结束时,花括号后面没有分号 5、函数定义一定要放在调用之前,如果b函数调用a函数,则a函数的定义要放在b函数之前 6、函数调用时,不需要圆括号

示例:

##!/bin/bash

function sayHello() {
    echo "hello"
}

sayHello

函数参数

在函数定义中,是没有形参列表的。在函数体内可以通过${n}来获取第n个参数的值。比如${1}获取第一个参数,${10}获取第10个参数。

示例:

##!/bin/bash

function func() {
    echo ${1}
    echo ${5}
    echo ${10}
}

func 2 4 6 8 10 12 14 16 18 20 22

执行结果

2
10
20

注意:当n小于10时,用$n也表示获取第n个参数,等价于${n};当n>=10时,只能通过${n}来获取第n个参数

另外,还有几个特殊字符用来处理参数

参数符号

说明

$#

传递到函数的参数个数

$*

以一个单字符串显示所有向函数传递的参数

$@

当没有用双引号引起来时与$*相同;但是使用时加引号(即"$@"),差异具体见本节附录

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$-

显示Shell使用的当前选项,与set命令功能相同

$?

显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

示例:

#!/bin/bash

function func() {
    echo $#
    echo $*
    echo $@
}

func 1 2 3

执行结果:

3
1 2 3
1 2 3

返回值

函数的返回值只能是整数类型,且范围在 [0,255]。在函数调用后面的第一条语句,我们可以用$?来获取函数的返回值

示例:

#!/bin/bash

function func() {
    return 100
}

func
echo $?

输出结果为100

  • 没有return语句时

当没有return语句时,会将函数体内最后一条语句的返回值(即最后一条语句的状态码,状态码就是在区间[0,255]中)将为函数的返回值

示例:

#!/bin/bash

function func() {
    abc
}

func
echo $?

执行结果

./a.sh: line 4: abc: command not found
127

说明:因为abc不是命令,所以该语句会返回错误状态码127

  • 仅有return关键字

和没有return语句是一样的

函数参数与脚本参数

我们知道,在函数外也可以通过$1 $#等方式获取脚本传进来的参数。不过可以放心的是,在函数内用$1 $#获取的是函数的参数,与脚本参数无关。

附录: $* vs $@

Last updated

Was this helpful?