shell - 函数
函数定义
函数的定义格式如下:
注意:
1、关键字function,可以带可以不带,建议带上 2、不需要给出形参列表 3、return语句可以不要;也可以直接return,后面不加任何内容;也可以return后面加一个对象 4、函数结束时,花括号后面没有分号 5、函数定义一定要放在调用之前,如果b函数调用a函数,则a函数的定义要放在b函数之前 6、函数调用时,不需要圆括号
示例:
函数参数
在函数定义中,是没有形参列表的。在函数体内可以通过${n}
来获取第n个参数的值。比如${1}
获取第一个参数,${10}
获取第10个参数。
示例:
执行结果
注意:当n小于10时,用$n
也表示获取第n个参数,等价于${n}
;当n>=10时,只能通过${n}
来获取第n个参数
另外,还有几个特殊字符用来处理参数
参数符号
说明
$#
传递到函数的参数个数
$*
以一个单字符串显示所有向函数传递的参数
$@
当没有用双引号引起来时与$*相同;但是使用时加引号(即"$@"),差异具体见本节附录
$$
脚本运行的当前进程ID号
$!
后台运行的最后一个进程的ID号
$-
显示Shell使用的当前选项,与set命令功能相同
$?
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
示例:
执行结果:
返回值
函数的返回值只能是整数类型,且范围在 [0,255]
。在函数调用后面的第一条语句,我们可以用$?来获取函数的返回值
示例:
输出结果为100
没有return语句时
当没有return语句时,会将函数体内最后一条语句的返回值(即最后一条语句的状态码,状态码就是在区间[0,255]
中)将为函数的返回值
示例:
执行结果
说明:因为abc不是命令,所以该语句会返回错误状态码127
仅有return关键字
和没有return语句是一样的
函数参数与脚本参数
我们知道,在函数外也可以通过$1 $#等方式获取脚本传进来的参数。不过可以放心的是,在函数内用$1 $#获取的是函数的参数,与脚本参数无关。
附录: $* vs $@
Last updated
Was this helpful?