函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,Shell 也支持函数。Shell 函数必须先定义后使用。
Shell 函数的定义格式如下:
function_name () { [commands] ... [ return value ] }
如果你愿意,也可以在函数名前加上关键字 function:
function function_name () { [commands] ... [ return value ] }
函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。
Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。
如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值。
先来看一个例子
myfunc () { echo "hello world" } # Invoke your function myfunc
运行结果:
$./test.sh hello world $
调用函数只需要给出函数名,不需要加括号。
19.1 函数返回值
myfunc(){ echo "hello world" return 5 } myfunc echo "myfunc return $?"
运行结果:
where@ubuntu:~$ ./test.sh hello world myfunc return 5
函数返回值在调用该函数后通过 $? 来获得。
19.2 嵌套调用
myfunc1 () { echo "myfunc1" myfunc2 } myfunc2 () { echo "myfunc2" } myfunc1
运行结果:
where@ubuntu:~$ ./test.sh myfunc1 myfunc2
19.3 函数参数传递
myfunc () { echo "myfunc $1 $2 $@" } myfunc
运行结果:
where@ubuntu:~$ ./test.sh myfunc 1 2 1 2 3
19.4 函数取消
像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 f 选项,如下所示:
unset f function_name
19.5 函数中的定义的变量
在函数中定义的变量在整个shell脚本中都能使用。
myfunc () { echo "myfunc" var=888 } myfunc echo $var
运行结果:
where@ubuntu:~$ ./test.sh myfunc 888