bash脚本的调试方法 大家知道,Bash 是linux操作系统的默认Shell脚本。 Shell是用来处理操作系统和用户交互的一个程序。
shell脚本可以帮助用户自动化地和操作系统进行交互。 一,跟踪脚本的执行
可以让bash打印出你脚本执行的过程中的所有语句。
例子,输出一个问候语句,然后输出当前的时间:
复制代码代码示例:
#!/bin/bash
echo "Hello $USER," echo "Today is $(date +'%Y-%m-%d')" [c-sharp] view plaincopy #!/bin/bash echo "Hello $USER," echo "Today is $(date +'%Y-%m-%d')"
使用-x选项来运行这段脚本:
复制代码代码示例:
$ bash -x example_script.sh
+ echo 'Hello chenhao,' Hello chenhao, ++ date +%Y-%m-%d + echo 'Today is 2009-08-31' Today is 2009-08-31 [c-sharp] view plaincopy $ bash -x example_script.sh + echo 'Hello chenhao,' Hello chenhao, ++ date +%Y-%m-%d + echo 'Today is 2009-08-31' Today is 2009-08-31
可以看到,bash在运行前打印出了每一行命令。
在一个很大的脚本中,你会看到很多很多的执行跟踪的输出,阅读起来非常费劲,所以,你可以在每一行前加上文件的行号,这会非常有用。
复制代码代码示例:
export PS4= '+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: '
查看下设置上了PS4这个环境变量后会是什么样的输出。
复制代码代码示例:
$ bash -x example_script.sh
+example_script.sh:2:: echo 'Hello chenhao,' Hello chenhao, ++example_script.sh:3:: date +%Y-%m-%d +example_script.sh:3:: echo 'Today is 2009-08-31' Today is 2009-08-31
二,调试部分的脚本
例如:
复制代码代码示例:
#!/bin/bash
echo "Hello $USER," set -x echo "Today is $(date %Y-%m-%d)" set +x [c-sharp] view plaincopy #!/bin/bash echo "Hello $USER," set -x echo "Today is $(date %Y-%m-%d)" set +x
运行结果:
复制代码代码示例:
$ . /example_script .sh Hello chenhao, ++example_script.sh:4:: date +%Y-%m-%d +example_script.sh:4:: echo 'Today is 2009-08-31' Today is 2009-08-31 +example_script.sh:5:: set +x 注意:在运行脚本的时候,不需要使用bash -x了。
三,日志输出
使用log前,先写一个函数:
复制代码代码示例:
_log() {
if [ "$_DEBUG" == "true" ]; then echo 1>&2 "$@" fi } [c-sharp] view plaincopy _log() { if [ "$_DEBUG" == "true" ]; then echo 1>&2 "$@" fi }
于是,就可以在你的脚本中如下使用:
复制代码代码示例:
_log "Copying files..." cp src/* dst/
上面那个_log函数,需要检查一个_DEBUG 变量,只有这个变量是真,才会真正开发输出日志。
复制代码代码示例:
$ _DEBUG= true . /example_script .sh
四,使用Bash专用调试器
如果,在写一个相当复杂的脚本,并且,需要一个完整的像调试别的语言一样的调试器,那么可以试着用用这个开源软件—— bashdb , 一个Bash的专用调试器。 (责任编辑:IT) |