在 Linux 中调试 shell 脚本可以使用以下技巧:
一、使用-x
选项进行调试输出
在执行脚本时加上-x
选项可以开启调试模式,它会显示脚本执行的每一行命令以及变量的扩展情况。例如:
bash -x myscript.sh
这样在执行脚本时,会输出类似于以下的内容:
+ echo 'Starting script' Starting script + VAR=10 + echo $VAR 10
二、设置断点
- 使用
read
命令设置临时断点:
在脚本中需要暂停的地方插入以下代码:
echo "Pausing at this point. Press Enter to continue." read temp
当脚本执行到这里时,会等待用户按下回车键继续执行。
- 使用
trap
命令捕获信号设置断点:
trap 'echo "Debugger breakpoint. Press Enter to continue."; read temp' DEBUG
这会在脚本执行过程中,每当遇到一个命令时触发trap
,显示提示信息并等待用户输入。
三、检查变量值
- 使用
echo
命令输出变量值:
在脚本中怀疑变量有问题的地方,可以使用echo
命令输出变量的值进行检查。例如:
echo "Value of VAR is: $VAR"
- 使用
set
命令显示所有变量:
在脚本中可以插入set
命令来查看当前所有变量的设置情况。
四、错误处理
- 检查退出状态码:
在脚本执行后,可以检查$?
变量的值来确定上一个命令的退出状态码。如果状态码不为零,表示有错误发生。例如:
command if [ $? -ne 0 ]; then echo "Command failed with exit status $?" fi
- 使用
trap
捕获错误信号:
可以使用trap
命令捕获错误信号,以便在发生错误时进行特定的处理。例如:
trap 'echo "An error occurred. Exiting script."; exit 1' ERR
这会在脚本执行过程中发生错误时,输出错误信息并退出脚本。
五、使用调试工具
bashdb
:
bashdb
是一个专门用于调试 bash 脚本的工具。它提供了类似于传统编程语言调试器的功能,如设置断点、单步执行、查看变量值等。
安装后,可以使用以下方式启动调试:
bashdb myscript.sh
- 使用编辑器的调试功能:
一些文本编辑器,如 Vim 和 Emacs,也提供了一定程度的 shell 脚本调试功能。可以通过插件或内置的功能来设置断点、单步执行和查看变量值。