1、标准语法
function fnname() {statementsreturn value}
function是 Shell 中的关键字,专门用来定义函数;fname是函数名;statements是函数要执行的代码,也就是一组语句;return value表示函数的返回值,其中 return 是 Shell 关键字,专门用在函数中返回一个值,这一部分可以写也可以不写。function getUser() {echo "当前用户为 ${USER}"return 0}# 调用函数getUser
1、简化写法
# 无括号 -- 报错!function getUser{echo "当前用户为 ${USER}"return 0}# 无function -- 报错!getUser() {echo "当前用户为 ${USER}"return 0}
2、函数调用
1、无参函数调用
直接写函数名称即可 ```bash function fnname() { statements return value }
// 调用无参函数 fname
<a name="OYEkL"></a>##### 2、有参函数调用:参数之间利用空格分割,和 Shell 脚本传递参数一样,函数在定义时候不能指定参数,在调用的时候传递参数即可,并且在调用函数时传递什么参数函数就接受什么参数。```bash// 定义函数function fnname() {statementsreturn value}// 调用函数fname param1 param2 param3
3、函数的参数
1、位置参数:
根据对应位置获取参数,$1~$n $0为脚本名称
function say() {
echo "第一个参数是:${1}"
echo "第二个参数是:${2}"
echo "第三个参数是:${3}"
echo "第四个参数是:${4}"
}
# 调用函数 根据位置获取参数
say go php java mysql
2、特殊参数
<br />**Tips**:局部变量需要特别声明在函数内部,利用 `local` 关键字来声明。
function say() {
echo "第一个参数是:${1}"
echo "第二个参数是:${2}"
echo "第三个参数是:${3}"
echo "第四个参数是:${4}"
echo "传递参数个数:${#}"
echo "传递的参数列表:${*}"
echo "传递的参数列表:${@}"
}
# 调用函数
say go php java mysql
# 获取函数调用结果
if [ ${?} -eq 0 ]
then
echo "say方法调用结果成功,值为:${?}"
else
echo "say方法调用结果失败,值为:${?}"
fi
3、函数返回值
函数返回值利用 $? 来接收。
shell 函数的返回值,只能是整形,并且在 0-257 之间,不能是字符串或其他形式。并且在调用方法和取得返回值之间,不能有任何操作,不然取不到 return 的值。
4、递归函数
lun=0
function recursion() {
lun=$[${lun}+1]
echo "$(date)"
sleep 1
if [ ${lun} -lt 10 ]
then
recursion inner # 递归调用函数
fi
}
recursion
