网站搜索

ShellCheck - 显示 Shell 脚本警告和建议的工具


ShellCheck 是一个静态分析工具,可以显示有关 bash/sh shell 脚本中的错误代码的警告和建议。它可以通过多种方式使用:从网络将 shell 脚本粘贴到 https://www.shellcheck.net 中的在线编辑器(Ace – 用 JavaScript 编写的独立代码编辑器)中(它始终同步到最新的 git)提交,这是尝试 ShellCheck 以获得即时反馈的最简单方法。

或者,您可以将其安装在计算机上并从终端运行它,将其与文本编辑器以及构建或测试套件集成。

ShellCheck 主要完成三件事:

  • 它指出并解释了导致 shell 给出神秘错误消息的典型初学者语法问题。
  • 它指出并解释了导致 shell 行为奇怪且违反直觉的典型中级语义问题。
  • 它还指出了一些微妙的警告、极端情况和陷阱,这些情况可能会导致高级用户的其他工作脚本在未来的情况下失败。

在本文中,我们将展示如何以各种方式安装和使用 ShellCheck 来查找 Linux 中 shell 脚本中的错误或错误代码。

如何在 Linux 中安装和使用 ShellCheck

ShellCheck 可以通过包管理器轻松地在本地安装,如图所示。

在 Debian/Ubuntu 上

apt-get install shellcheck

在 RHEL/CentOS 上

yum -y install epel-release
yum install ShellCheck

在软呢帽上

dnf install ShellCheck

安装完ShellCheck之后,我们就来看看前面提到的各种方法如何使用ShellCheck。

从网络使用 ShellCheck

转到 https://www.shellcheck.net 并将脚本粘贴到提供的 Ace 编辑器中,您将在编辑器底部查看输出,如下面的屏幕截图所示。

在以下示例中,测试 shell 脚本由以下行组成:

#!/bin/bash
#declare variables
MINARGS=2
E_NOTROOT=50
E_MINARGS=100
  
#echo values of variables 
echo $MINARGS
echo $E_NONROOT
exit 0;

从上面的屏幕截图中,前两个变量 E_NOTROOTE_MINARGS 已声明但未使用,ShellCheck 将这些报告为“暗示性错误”:

SC2034: E_NOTROOT appears unused. Verify it or export it.
SC2034: E_MINARGS appears unused. Verify it or export it. 

其次,错误的名称(在语句 echo $E_NONROOT 中)被用来 echo 变量 E_NOTROOT,这就是 ShellCheck 显示错误的原因:

SC2153: Possible misspelling: E_NONROOT may not be assigned, but E_NOTROOT is

同样,当您查看 echo 命令时,变量没有被双引号括起来(有助于防止通配符和分词),因此 Shell Check 会显示警告:

SC2086: Double quote to prevent globbing and word splitting.

从终端使用 ShellCheck

您还可以从命令行运行 ShellCheck,我们将使用上面相同的 shell 脚本,如下所示:

shellcheck test.sh

从文本编辑器使用 ShellCheck

您还可以直接在各种编辑器中查看ShellCheck建议和警告,这可能是使用ShellCheck的更有效方法,一旦您保存文件,它就会向您显示代码中的任何错误。

Vim 中,使用 ALE 或 Syntastic(我们将使用它):

首先安装 Pathogen,以便轻松安装 syntastic。运行以下命令来获取 pathogen.vim 文件及其所需的目录:

mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

然后将其添加到您的 ~/.vimrc 文件中:

execute pathogen#infect()

一旦你安装了 Pathogen,你现在可以将 syntastic 放入 ~/.vim/bundle 中,如下所示:

cd ~/.vim/bundle && git clone --depth=1 https://github.com/vim-syntastic/syntastic.git

接下来,关闭 vim 并重新启动它以重新加载它,然后键入以下命令:

:Helptags

如果一切顺利,您应该将 ShellCheckVim 集成,下面的屏幕截图显示了它如何使用上面相同的脚本工作。

如果按照上述步骤后出现错误,则可能没有正确安装 Pathogen。重做这些步骤,但这确保您执行了以下操作:

  • 创建了 ~/.vim/autoload~/.vim/bundle 目录。
  • 将执行 Pathogen#infect() 行添加到您的 ~/.vimrc 文件中。
  • git 克隆了 ~/.vim/bundle 内的 syntastic。
  • 使用适当的权限访问上述所有目录。

您还可以使用其他编辑器来检查 shell 脚本中的错误代码,例如:

  • Emacs中,使用Flycheck
  • 在 Sublime 中,使用 SublimeLinter。
  • 在 Atom 中,使用 Linter。
  • 在大多数其他编辑器中,使用 GCC 错误兼容性。

注意:使用不良代码库进行更多的ShellChecking。

ShellCheck Github 存储库:https://github.com/koalaman/shellcheck

就是这样!在本文中,我们展示了如何安装和使用 ShellCheck 来查找 Linux 中 shell 脚本中的错误或错误代码。通过下面的评论部分与我们分享您的想法。

您还知道其他类似的工具吗?如果是,请在评论中分享有关他们的信息。