- 论坛徽章:
- 5
|
本帖最后由 274920831 于 2018-08-20 10:10 编辑
在曹羽中写的Shell脚本调试技术,相关链接中:https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/
提到了关于DEBUG的使用和set -x , set +x的使用:
首先我说一下我对set -x 这个的理解,举例说明吧,一个最简单的脚本:
--------------------------------------------------------------
[andrew@localhost ~]$ cat exp5.sh
set -x
rm -rf 1.txt
set +x
rm -rf 2.txt
--------------------------------------------------------------
当我运行这个脚本时,会出现这样的输出:
--------------------------------------------------------------
[andrew@localhost ~]$ bash exp5.sh
+ rm -rf 1.txt
+ set +x
--------------------------------------------------------------
在set -x和set +x之间的是rm -rf 1.txt,这个命令会被跟踪,而放在下面的rm -rf 2.txt则不会。
我现在对DEBUG不理解,首先按照他的说法,定义一个DEBUG函数可以使植入调试钩子的过程更简洁方便,那么按照他的写法,我把DEBUG函数放在我的脚本里面来:
----------------------------------------------------------
[andrew@localhost ~]$ cat exp4.sh
DEBUG()
{
if [ "$DEBUG" = "true" ]; then
$@
fi
}
DEBUG set -x
rm -rf 1.txt
DEBUG set +x
rm -rf 2.txt
----------------------------------------------------------
当我执行这个脚本的时候,如下所示,它是没有任何输出的,那么这里的DEBUG的作用是什么,是不是当有ERROR的时候,它才会报错:
-----------------------------------------------------------
[andrew@localhost ~]$ bash exp4.sh
[andrew@localhost ~]$
-----------------------------------------------------------
同时还有一个问题就是:
DEBUG()
{
if [ "$DEBUG" = "true" ]; then
$@
fi
}
这个DEBUG函数里面的,$@是什么意思? shell中
$@ 传递给脚本或函数的所有参数
在这里的 $@ 我应该如何来理解 ?
|
|