46、shell编程-函数高级用法

函数返回

函数体中定于返回值,不能使用exit,因为函数是在当前shell中执行,使用exit会退出当前shell,如下所示

46、shell编程-函数高级用法

可以使用return 命令,执行函数退出的状态码,return 0 无错误返回  return 1-255 有错误返回  return 从函数中返回,即最后命令状态

46、shell编程-函数高级用法

环境函数

在脚本中调用函数无法传递到shell中子进程中,通过定义环境函数,可以使子进程调用函数

46、shell编程-函数高级用法

定义环境函数

declare -xf functionname
或者 export -f functionname

46、shell编程-函数高级用法

函数参数

函数可以接受参数,在函数体中,可以使用$1 $2 $@ $#等参数

46、shell编程-函数高级用法

函数变量

因函数作用不开启子shell,运行函数过程中,可能会导致函数变量与当前shell变量冲突,导致运行异常。

变量作用范围域:

普通变量:在当前shell有效,如脚本调用,作用当前脚本
环境变量:当前shell和子shell有效
本地变量:函数生命周期,函数结束是变量自动销毁(一般建议)
定义本地变量方法 local name=value

46、shell编程-函数高级用法

46、shell编程-函数高级用法

函数递归

函数递归:函数直接或间接调用自身,质疑递归层数,可能陷入死循环

阶层递归:

fact (){
if [ $1 -eq 1 -o $1 -eq 0 ];then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi
}
超过一定数变成了0

46、shell编程-函数高级用法

:(){ :|:& };:
bomb() { bomb | bomb & }; bomb
利用函数无限调用,函数体内调用函数 &代表同时运行
发表评论

相关文章