最近在看《Linux Shell 脚本攻略》(【印】Sarath Lakshman 著 门佳 译 人民邮电出版社 )
做点笔记。。
1.利用bash内建调试
-
personball@vostro:SHELL$cat debug.sh
-
#!/bin/bash
-
for i in {1..6}
-
do
-
set -x
-
echo $i
-
set +x
-
done
-
echo "Script executed"
-
personball@vostro:SHELL$./debug.sh
-
+ echo 1
-
1
-
+ set +x
-
+ echo 2
-
2
-
+ set +x
-
+ echo 3
-
3
-
+ set +x
-
+ echo 4
-
4
-
+ set +x
-
+ echo 5
-
5
-
+ set +x
-
+ echo 6
-
6
-
+ set +x
-
Script executed
-
personball@vostro:SHELL$
另外,使用 bash -x选项调用脚本,或者在#!/bin/bash后跟-x ,也一样。
2.自定义调试信息
-
personball@vostro:SHELL$./debug2.sh
-
1
-
4
-
9
-
16
-
25
-
36
-
49
-
64
-
81
-
100
-
personball@vostro:SHELL$_DEBUG=on ./debug2.sh
-
**Debug**: 1
-
1
-
**Debug**: 2
-
4
-
**Debug**: 3
-
9
-
**Debug**: 4
-
16
-
**Debug**: 5
-
25
-
**Debug**: 6
-
36
-
**Debug**: 7
-
49
-
**Debug**: 8
-
64
-
**Debug**: 9
-
81
-
**Debug**: 10
-
100
-
personball@vostro:SHELL$cat debug2.sh
-
#!/bin/bash
-
function DEBUG()
-
{
-
[ "$_DEBUG" == "on" ] && $@ || : #可理解为 ( [] && cmd1 )||:
-
} # []为真则执行$@,否则执行:(do nothing)
-
# 这里若$@为空是否导致执行:?可改写:试试。($@的值始终作为命令看待,即整个语句就是cmd1&&cmd2||cmd3 []相当于test命令)
-
for i in {1..10}
-
do
-
DEBUG echo "**Debug**: $i"
-
echo $[$i*$i]
-
done
最后,要注意使用 sh命令调用脚本和使用bash调用脚本以及./ 方式的不同。
-
personball@vostro:SHELL$sh debug.sh
-
+ echo {1..6}
-
{1..6}
-
+ set +x
-
Script executed
-
personball@vostro:SHELL$./debug.sh
-
+ echo 1
-
1
-
+ set +x
-
+ echo 2
-
2
-
+ set +x
-
+ echo 3
-
3
-
+ set +x
-
+ echo 4
-
4
-
+ set +x
-
+ echo 5
-
5
-
+ set +x
-
+ echo 6
-
6
-
+ set +x
-
Script executed
-
personball@vostro:SHELL$
*sh和bash是不同的解释器,语法上有不同(感谢 irc.freenode.net #ubuntu-cn 上的 adam8157 解惑)
*sh可以理解为当前shell的兼容模式(感谢 irc.freenode.net #ubuntu-cn 上的 MeaCulpa_ 解惑)
3.更强大的脚本调试工具,可以使用 bashdb
阅读(1992) | 评论(0) | 转发(0) |