Shell中函数可以像简单命令被调用,执行复合命令,函数可以带有参数,叫位置参数(以下简称"参数")。
函数基本形式为:
[ function ] name () compound-command [redirection]
上面定义了一个名称为name的函数,中括号[]里的保留字可省略;若保留,函数名后的小括号(),可省略。函数体是放在一对大括号{}里的复合命令。函数被调用时,就是执行该组复合命令。函数基本形式里重定向部分[redirection],会在函数体执行前,先执行。
若函数带有参数,那么参数个数,各个参数内容,所有参数,都有特殊变量表示。
示例如下(函数需先定义,后调用):
# function func () {
> echo "参数个数: ${#}"
> echo "第一个参数: ${1}"
> echo "第二个参数: ${2}"
> echo "第三个参数: ${3}"
> echo "所有参数: ${@}"
> echo "所有参数: ${*}"
> }
# func "a" "bb" "ccc"
参数个数: 3
第一个参数: a
第二个参数: bb
第三个参数: ccc
所有参数: a bb ccc
所有参数: a bb ccc
函数体中的变量若未使用内置命令local修饰,其就是在函数和调用者间共享,即全局变量;若使用local修饰,该变量就只属于函数,即局部变量。
函数的退出状态一般是函数体最后一个命令的状态。若想控制函数的退出时刻,需使用内置命令return显式指定。函数的退出状态使用$?表示。
示例如下,若$1不包含$2,返回1,否则返回0:
# function strstr () {
> [ "${1#*$2*}" = "$1" ] && return 1
> return 0
> }
# strstr "abcxyz" "zzz"
# echo $?
1
# strstr "abcxyz" "xyz"
# echo $?
0
如何将函数的输出,赋值给变量呢。前面说到函数调用,和执行简单命令类似,那么获取函数的输出,就和获取简单命令的输出类似。
示例如下:
# function getstring () {
> echo "zzzz"
> }
# var=$(getstring)
# echo $var
zzzz
若感兴趣可关注订阅号”数据库最佳实践”(DBBestPractice).
转载于:https://blog.51cto.com/coveringindex/2325026