ShellCheck - 显示 Shell 脚本警告和建议的工具
ShellCheck是一个静态分析工具,可显示有关 bash/sh shell 脚本中错误代码的警告和建议。它有多种使用方式:从 Web 上将 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
在 Fedora 上
# dnf install ShellCheck
安装 ShellCheck 后,让我们看一下如何以之前提到的各种方法使用 ShellCheck。
从 Web 使用 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中)来回显变量 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 就很容易了。运行以下命令获取cause.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目录。
- 将执行病原体#infect() 行添加到您的~/.vimrc文件中。
- 是否在~/.vim/bundle里面进行了 syntastic 的 git clone 。
- 使用适当的权限访问上述所有目录。
您还可以使用其他编辑器来检查 shell 脚本中的错误代码,例如:
注意:使用错误代码库进行更多 ShellChecking。
ShellCheck Github 仓库:https://github.com/koalaman/shellcheck
就是这样!在本文中,我们展示了如何安装和使用ShellCheck来查找 Linux 中 shell 脚本中的错误或错误代码。通过下面的评论部分与我们分享您的想法。
你知道还有其他类似的工具吗?如果有,请在评论中分享有关它们的信息。