Linux Bash Shell 调试技巧,赶紧收藏!

How to Debug Linux Bash Shell Script

在大多数编程语言中,都有调试工具可用于调试。调试器是一种可以运行程序或脚本的工具,它使您能够在脚本或程序运行时检查其内部结构。

在这篇文章中,我们将学习如何在 linux 中逐行调试 bash shell 脚本。在 shell 脚本中,我们没有任何调试工具,但是在 bash 命令行选项 (如 -n, -v ,-x) 的帮助下,我们可以进行调试。

检查 Shell 脚本语法错误

当我们在 bash 命令中使用 -n 选项运行脚本时,它不会执行脚本,但它会读取脚本并验证语法,如果有错误,则会报告错误。

让我们创建一个包含以下内容的脚本

$ vi debug_quotes.sh
#!/bin/bash
echo "USER=$USER"
echo "Today's Date: $(date)
echo "SHELL=$SHELL"

保存并关闭该文件。

现在尝试使用 -n 选项运行脚本

$ bash -n debug_quotes.sh
debug_quotes.sh: line 4: unexpected EOF while looking for matching `"'
debug_quotes.sh: line 5: syntax error: unexpected end of file
$

上面的输出显示有语法错误,缺少双引号。要解决这个问题,在显示今天日期的行尾加上双引号。

Debug-Quotes-Shell-Script-Linux

以详细模式运行 Shell 脚本

bash 命令中的 -v 选项告诉 shell 脚本以详细模式运行。实际上,这意味着 shell 将在执行命令之前回显每个命令。这是非常有用的,因为它通常可以帮助找到错误。

让我们创建一个名为 listusers.sh 的 shell 脚本,其中包含以下内容

$ vi listusers.sh
#!/bin/bash
cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt
awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt

#Clean up the temporary file.
/bin/rm -f /tmp/users.txt

使用 -v 选项执行脚本

$ bash -v listusers.sh

list-users-script-output-linux

在上面的输出中,脚本输出与执行的命令混合在一起。但是,使用 -v 选项,至少您可以更好地了解 shell 在运行脚本时正在做什么。

使用 -n 和 -v 选项运行脚本

我们可以组合使用 -n-v 命令行选项,这是一个很好的组合,因为我们可以在查看脚本输出的同时检查脚本的语法。

让我们回顾思考之前使用的脚本“debug_quotes.sh”

$ bash -nv debug_quotes.sh
#!/bin/bash
echo "USER=$USER"
echo "Today's Date: $(date)
echo "SHELL=$SHELL"
debug_quotes.sh: line 4: unexpected EOF while looking for matching `"'
debug_quotes.sh: line 5: syntax error: unexpected end of file
$

逐行调试 shell 脚本

-x 选项是 execution trace 的缩写,它告诉 shell 在执行替换步骤后回显每个命令。因此,我们可以看到变量和命令的值。通常,这个选项本身将有助于诊断问题。

在大多数情况下,-x 选项提供了关于脚本的最有用的信息,但它可能导致大量输出。

$ bash -x listusers.sh
+ sort
+ grep sh
+ grep -v sbin
+ cut -d : -f1,5,7 /etc/passwd
+ awk -F: ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt
linuxtechi linuxtechi,,,
root root
+ /bin/rm -f /tmp/users.txt
$

正如我们所看到的,shell 在每个命令前面插入了一个 + 号。

使用 ShellCheck 调试 Shell 脚本

Shellcheck 是一个免费的工具,它为我们的 bash 或 shell 脚本提供警告和建议,指出了 shell 脚本的语法和语义问题。

Ubuntu / Debian 安装

$ sudo apt install shellcheck

RHEL / Fedora / CentOS 安装

$ sudo dnf install epel-release -y
$ sudo dnf install ShellCheck

使用 shellcheck 运行上面的 debug_quotes.sh 脚本

$ shellcheck debug_quotes.sh

ShellCheck-Script-Output

要抑制警告消息,请使用 -e 选项,如下所示

$ shellcheck -e SC1078 debug_quotes.sh

Exclude-Warning-Shellscheck-Script

上面的输出确认第 3 行有语法错误,如果我们在第 3 行末尾加上双引号,那么语法错误将被修复。

我的开源项目

酷瓜云课堂-开源知识付费解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值