在shell中还可以定义函数。函数实际上也是由若干条shell命令组成的。因此它与shell程序形式上相似的,
函数定义
函数定义的基本格式为:
[function] 函数名() #函数名前的function可以省略
{
若干个命令行
}
所有函数在使用前必须定义,这意味着必须将函数放在脚本开始部分。或者将它们放在另一个独立文件中且以点号 . 命令来取用它们。
函数在定义时不用带参数说明。
函数内的变量
函数没有提供局部变量,因此所有的函数都与父脚本共享变量;必须小心留意不要修改脚本里不期望被修改的东西。
函数返回值
使用return命令,return命令格式为:
return [exit-value]
return返回退出值(整数值)给调用它的脚本。
如果未提供参数,则使用默认退出状态,也就是最后一个执行的命令的退出状态。因此,严禁的shell函数写法为:
return $?
因为return命令会返回一个退出值给调用者,所以可以在if while语句里使用函数。例如,使用函数取代test所执行的字符比较:
#!/bin/bash
equal() {
case "$1" in
"$2") return 0 ;; # match
esac
return 1 # unmatch
}
if equal "test1" "test2"; then
echo "match"
else
echo "unmatch"
fi
函数调用
调用函数的格式为:
函数名 参数1 参数2 ... ...
向函数传递参数就像在一般脚本中使用位置变量$1, $2, ... ...一样。函数去的所传参数后,将原始参数传回shell脚本,因此最好先在函数内重新设置变量保存所传参数。
父脚本中的位置参数临时地被函数参数锁隐藏。当函数完成时,原来的命令行参数会恢复。