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
$ 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青年艺术团主持
相关资讯
- 07-01· 禁教唐诗算术能还幼儿快
- 07-01· 2011年06月17日
- 07-01· 唐诗宋词英译:李商隐 筹
- 07-01· 仿评《唐诗1000首》第186首
- 07-01· 没事干的时候背背唐诗吧
- 07-01· [转载]唐诗中“斜”字该读
- 07-01· 湖南醴陵瓷业转型升级
- 07-01· 奇瑞风云2两厢黑色|2010款
- 07-01· 摩根士丹利华鑫摩根士丹
- 07-01· 摩根士丹利华鑫近期优选
图文资讯
最新资讯
- 07-01· 中金投行部大摩出售中金
- 07-01· 摩根士丹利招聘6月2日【实
- 07-01· 营养防病圣典
- 07-01· 《博伽梵歌原意》之第十
- 07-01· [不错]斑斓圣典---减肥中常
- 07-01· 武乐圣典《太极武当》:武
- 07-01· 铁血英雄-现阶段战功牌兑
- 07-01· 2011年06月10日【原创】南歌
- 07-01· 【淘宝网信息】- 2010年的
- 07-01· 深圳品牌女装有哪些?