ShellCheck 是什么网站?
更新时间
ShellCheck(shellcheck.net)是一个开源的 shell 脚本静态分析工具官网,主要用途是自动找出 shell 脚本中的错误、可移植性问题和易错写法。它适合两类人:想快速检查一段脚本、又不想安装任何东西的人,可以直接在网页编辑器里粘贴脚本查看结果;需要长期在本地或 CI 中检查脚本的人,则可以通过包管理器安装,或接入编辑器与代码托管平台。需要注意,网页版只是试用入口,实际输出取决于你粘贴的脚本内容。
它能发现什么问题
ShellCheck 做的是静态分析:不运行脚本,而是读取脚本源码,按 shell 语法规则和常见陷阱给出警告。官网示例覆盖了几类典型问题:
- shebang 与语法不匹配:脚本开头写
#!/bin/sh,正文却用了{1..$RANDOM}、(( ))、[[ ]]等 bash 特性,工具会提示可移植性问题,并建议改成#!/bin/bash。 - 引用与通配符问题:如
for f in $(ls *.m3u)这类写法,以及变量未加引号导致空格或特殊字符被错误拆分。 - 变量拼写与逻辑错误:示例中
str="$strbuzz"明显是把$str和buzz拼在了一起,属于高层次的语义问题。 - 命令替换与比较写法:如
[[ "$$(uname)" == "Linux" ]]这类可疑写法会被指出。 - 引号内的变量不展开:单引号中的
$HOME不会展开,脚本行为与作者意图不符时会被提示。
这些检查的共同点是:脚本能跑,但结果可能不是你以为的那样。ShellCheck 的价值就在于在运行前把这些隐患暴露出来。
网页版怎么用
网页版是最低门槛的试用方式,流程只有三步:
- 打开 shellcheck.net,页面中部有一个脚本编辑区(基于 Ace 编辑器)。
- 把脚本粘贴进去,或点击“Load random example”载入官方示例。
- 下方输出窗口会显示 ShellCheck 的分析结果;部分问题提供“Apply fixes”自动修复入口。
预期结果是:输出窗口从空白变为带行号和规则说明的警告列表。常见卡点有两个:一是脚本较长时编辑器加载需要一点时间;二是网页版适合单次检查,不适合批量或持续集成场景。
本地安装与集成方式
官网明确给出了多种安装渠道,可按你的环境选择:
| 使用场景 | 方式 | 说明 |
|---|---|---|
| 本地命令行检查 | apt、dnf、pkg、brew、cabal |
官网列出的包管理器安装方式,装好后可在终端直接分析脚本文件 |
| 编辑器内实时提示 | 主流编辑器的集成 linter | 官网称已支持主要编辑器,写脚本时即可看到警告 |
| 代码托管自动检查 | CodeClimate、Codacy、CodeFactor | 用于自动检查 GitHub 仓库中的脚本 |
| 源码与文档 | GitHub、ShellCheck Wiki | 规则说明和项目源码均可查阅 |
选择建议:只是偶尔检查一段脚本,用网页版即可;如果脚本是项目的一部分、需要每次提交都检查,优先考虑编辑器集成或代码托管平台的自动检查,避免依赖人工粘贴。
使用前需要知道的边界
ShellCheck 是静态分析工具,它给出的是基于规则的警告,不是运行时验证。脚本逻辑是否正确、外部命令行为是否符合预期,仍需实际运行确认。另外,官网页面提到工具以 GPLv3 发布、用 Haskell 编写,这些属于项目背景信息;页面中出现的 BashSupport Pro 等赞助方链接,不代表 ShellCheck 本身提供付费版本,页面也未说明收费或登录限制。