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_NOTROOT 和 E_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
如果一切顺利,您应该将 ShellCheck 与 Vim 集成,下面的屏幕截图显示了它如何使用上面相同的脚本工作。
如果按照上述步骤后出现错误,则可能没有正确安装 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 脚本中的错误或错误代码。通过下面的评论部分与我们分享您的想法。
您还知道其他类似的工具吗?如果是,请在评论中分享有关他们的信息。