您的位置:首页 > 服装鞋帽 > 女装 > linux shell的一些技巧(四)让脚本的调用递归了吧

linux shell的一些技巧(四)让脚本的调用递归了吧

luyued 发布于 2011-03-17 16:42   浏览 N 次  
实际上,递归有点假,它的原意是,使多个脚本互相调用时避免死循环;那么,如何做到呢?现有3个shell文件:a.sh b.sh c.sh$ cat a.sh#!/bin/bashregister_env() { # 定义函数,用于注册环境专用变量 project_path=$PWD # project_path规定这个变量只能在这使用~~,如果不敢确定,加上readonly是个不错的选择,但是无法unset了}unregister_env() { # 定义函数,用于注销环境专用变量 unset project_path}sysExit() { # 退出,退出时注销环境专用变量,为避免一些人使用使用". xxx.sh"的命令执行~~ register_env exit $1 # 严重不推荐使用". xxx.sh"执行,如果非要这样,就不要使用exit退出了,避免无意退出当前shell}register_env # 调用函数,定义变量
$ cat b.sh#!/bin/bashshow_b() { # 单纯的定义一个用于显示简单数据的函数 echo "b.sh: hello $FUNCNAME" # $FUNCNAME用于函数中,表示函数名}[ -n "$project_path" ] && return 0 # 这句是重点,$project_path是a.sh中定义的专用变量,如果这个变量已经被定义(非空),则返回# 直接执行b.sh时,将从以下执行[ -f a.sh ] && . a.sh # 现在包含一下a.sh[ -f c.sh ] && . c.sh # 包含c.shecho ">>> root: $(basename $0)" # 输出执行命令show_b # 调用简单显示数据的函数show_c # 同上sysExit 0 # 退出
$ cat c.sh #!/bin/bashshow_c() { # 在c.sh,显示数据的函数名为show_c echo "c.sh: hello $FUNCNAME"}[ -n "$project_path" ] && return 0[ -f a.sh ] && . a.sh[ -f b.sh ] && . b.shecho ">>> root: $(basename $0)"show_bshow_csysExit 0c.sh实际上与b.sh很相似~~通过$project_path的检测,便可以使用b.sh、c.sh互相调用,可以从任意一个脚本启动,这在构建一个稍大的控制环境时,灵活的控制,会给使用者带来不少使得,当然,要控制妥当~~~
执行:$ ./b.sh>>> root: b.sh # 执行命令为b.shb.sh: hello show_bc.sh: hello show_c$./c.sh>>> root: c.sh # 执行命令为c.shb.sh: hello show_bc.sh: hello show_c
上一篇:南木之旅 下一篇:FLY青年艺术团主持
图文资讯
广告赞助商