函数返回
函数体中定于返回值,不能使用exit,因为函数是在当前shell中执行,使用exit会退出当前shell,如下所示
可以使用return 命令,执行函数退出的状态码,return 0 无错误返回 return 1-255 有错误返回 return 从函数中返回,即最后命令状态
环境函数
在脚本中调用函数无法传递到shell中子进程中,通过定义环境函数,可以使子进程调用函数
定义环境函数
declare -xf functionname
或者 export -f functionname
函数参数
函数可以接受参数,在函数体中,可以使用$1 $2 $@ $#等参数
函数变量
因函数作用不开启子shell,运行函数过程中,可能会导致函数变量与当前shell变量冲突,导致运行异常。
变量作用范围域:
普通变量:在当前shell有效,如脚本调用,作用当前脚本
环境变量:当前shell和子shell有效
本地变量:函数生命周期,函数结束是变量自动销毁(一般建议)
定义本地变量方法 local name=value
函数递归
函数递归:函数直接或间接调用自身,质疑递归层数,可能陷入死循环
阶层递归:
fact (){
if [ $1 -eq 1 -o $1 -eq 0 ];then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi
}
超过一定数变成了0
fork炸弹是一种恶意程序,内部是一个无线循环
:(){ :|:& };:
bomb() { bomb | bomb & }; bomb
利用函数无限调用,函数体内调用函数 &代表同时运行