📅  最后修改于: 2023-12-03 15:12:12.232000             🧑  作者: Mango
Shell 脚本是一种非常方便的自动化工具,它能够帮助程序员简化很多工作。但在写 Shell 脚本时,难免会出现一些 Bug,这时我们就需要调试 Shell 脚本了。本文将介绍一些常用的调试方法和工具。
xtrace 是 Bash 的一种 debug 模式,可以输出执行到每个命令时的日志。
使用方法:
bash -x shell_script.sh
或在脚本文件头部加入 set -x
:
#!/bin/bash
set -x
# your script here
xtrace 输出的日志前面会有一个 +
符号。
+ echo 'Hello, world!'
Hello, world!
xtrace 的缺点是会将所有的变量和函数调用都输出,导致输出比较冗长。
Shellcheck 是一个 Shell 脚本语法检查工具,它能够帮助我们找出一些常见的语法错误。
使用方法:
安装 Shellcheck:
$ sudo apt-get install shellcheck # Ubuntu/Debian
$ brew install shellcheck # macOS/Homebrew
运行 Shellcheck:
$ shellcheck shell_script.sh
Shellcheck 的输出格式是有标准的,例如:
In file shell_script.sh line 8:
if [$1 == "debug"]; then
^-- SC2086: Double quote to prevent globbing and word splitting.
上面的提示意思是在 if 表达式中没有加双引号,应该改成:
if [ "$1" == "debug" ]; then
set -e 是 Bash 的一种选项,它可以让整个脚本在遇到错误时停止运行。
使用方法:
在脚本文件头部加入 set -e
:
#!/bin/bash
set -e
# your script here
如果在脚本运行过程中遇到了错误,就会停止运行并退出。
需要注意的是,set -e 只能捕获到一些 Shell 内置命令的错误,而不能捕获到像 grep 这类外部命令的错误。如果需要捕获外部命令的错误,可以用如下的方法:
#!/bin/bash
set -e
set -o pipefail
# your script here
Bashdb 是 Bash 的一个调试工具,它能够让我们像调试 C 一样来调试 Shell 脚本。
使用方法:
安装 Bashdb:
$ sudo apt-get install bashdb # Ubuntu/Debian
$ brew install bashdb # macOS/Homebrew
运行 Bashdb:
$ bashdb shell_script.sh
进入 Bashdb 以后,可以使用一些调试命令,比如
n
(next):执行下一条语句。s
(step):进入函数或者语句块。c
(continue):跳过断点直接执行到程序结束。b
(break):在某一行设置断点。l
(list):查看某一行的代码。p
(print):打印某个变量的值。q
(quit):退出 Bashdb。除了上面这些常用命令,Bashdb 还支持更多的调试操作。
以上就是调试 Shell 脚本的一些常用方法和工具了。当然,这些方法和工具不一定适用于所有的场景,需要根据具体情况来选择适合自己的调试方式。