简介

shellcheck 是一款实用的 shell脚本静态检查工具。

  • 首先,可以帮助你提前发现并修复简单的语法错误,节约时间。每次都需要运行才发现写错了一个小地方,确实非常浪费时间。
  • 其次,可以针对你当前不够完善不够健壮的写法,提供建议,帮助你提前绕开一些坑,避免等问题真的发生了才去调试处理。

在其介绍中,目标是针对所有用户的,从初学者到高手,都用得上

  • 指出并澄清典型的初学者的语法问题,那通常会shell提供神秘的错误消息。
  • 指出并澄清典型的中级的语义问题,这些问题会导致shell出现奇怪且反直觉的行为。
  • 指出可能导致高级用户的脚本中,可能在未来某种情况下失败的陷阱。

在网页上使用

1
非常简单,在网页 `https://www.shellcheck.net` 上,贴入你的脚本,运行检查即可

在命令行中使用

1
下载后,在命令行中调用 `shellcheck yourscript` 即可

集成到编辑器中(推荐)

推荐将shellcheck直接集成到日常编辑器中,这样就可以直接在编辑器中查看ShellCheck建议,以最快速度发现并修复问题。

  • Vim 通过 ALE, NeomakeSyntastic 进行集成
  • Emacs 通过 FlycheckFlymake 集成
  • Sublime 通过 SublimeLinter
  • Atom 通过 Linter
  • VSCode 通过 vscode-shellcheck

安装

Ubuntu

1
$ apt-get install shellcheck

Centos

1
$ yum -y install epel-release

Fedora

1
$ dnf install ShellCheck

使用方法

1
$ shellcheck myscript.sh

举例

1
2
3
4
5
6
7
8
#!/bin/bash
if[ $# -eq 0 ]
then
echo "no para"
else
echo "$# para"
fi
exit 0

看运行报错

1
2
3
./test.sh: line 4: if[ 0 -eq 0 ]: command not found
./test.sh: line 5: syntax error near unexpected token `then'
./test.sh: line 5: `then'

只是告诉你在then附近有语法问题,到底什么问题呢?我们用shellcheck看看:

1
2
3
4
$ shellcheck test.sh
In test.sh line 4:
if[ $# -eq 0 ]
^-- SC1069: You need a space before the [.

这么一看,就很清楚了,原来[前面少了空格。