📜  调试 shell 脚本 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:12:12.232000             🧑  作者: Mango

调试 Shell 脚本 - Shell-Bash

Shell 脚本是一种非常方便的自动化工具,它能够帮助程序员简化很多工作。但在写 Shell 脚本时,难免会出现一些 Bug,这时我们就需要调试 Shell 脚本了。本文将介绍一些常用的调试方法和工具。

xtrace

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

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

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

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 脚本的一些常用方法和工具了。当然,这些方法和工具不一定适用于所有的场景,需要根据具体情况来选择适合自己的调试方式。