如何安装和使用 ShellCheck?
更新时间
ShellCheck 是一个开源的 shell 脚本静态分析工具,用于自动发现脚本中的 bug。你可以直接在 shellcheck.net 网页编辑器中粘贴脚本试用,也可以根据页面提供的包管理器(cabal、apt、dnf、pkg、brew)在本地安装。网页版适合快速检查单个脚本,本地安装适合把检查纳入日常开发流程。
网页版:最快上手
- 打开 shellcheck.net。
- 在标有 “Paste a script to try it out” 的编辑器中粘贴你的脚本内容。
- 查看下方 “ShellCheck Output” 窗口,检测结果会显示在这里。
- 如果输出中给出可自动修复的建议,可使用 “Apply fixes” 应用修复;遇到工具本身的问题,可用 “Report bug” 反馈。
网页编辑器还提供 “Load random example” 加载示例脚本,适合先观察 ShellCheck 能发现哪些问题,再换成自己的脚本。页面提示移动端也可粘贴脚本使用。
本地安装
页面明确列出了以下安装方式,按你的系统或工具链选择:
| 方式 | 适用场景 |
|---|---|
| apt | Debian/Ubuntu 等使用 apt 的系统 |
| dnf | Fedora 等使用 dnf 的系统 |
| pkg | 使用 pkg 包管理器的系统 |
| brew | macOS 或使用 Homebrew 的环境 |
| cabal | 已有 Haskell 工具链、希望通过 cabal 安装 |
安装后即可在终端对脚本文件运行检查,不必每次打开网页。ShellCheck 是 GPLv3 开源软件,源码和文档分别在 GitHub 和 ShellCheck Wiki 上。
它能发现什么问题
从官网示例可以看出,ShellCheck 覆盖从语法到语义的多个层面:
- 可移植性问题:脚本 shebang 写
#!/bin/sh却使用了 bash 专有语法时,会提示改为#!/bin/bash。 - 引号问题:未加引号的变量展开、错误的引号嵌套等,示例中专门展示了多种引号相关缺陷。
- 常见逻辑错误:如
for f in $(ls *.m3u)这类解析ls输出的写法、变量拼写错误(如$strbuzz少了下划线)、echo -e的可移植性等。 - 较高层语义问题:示例中包括对
getopts参数处理、文件类型分支、$$(uname)这类错误命令替换的检测。
每条结果通常附带解释和修改建议,具体规则可在 ShellCheck Wiki 中查阅。
集成到开发流程
页面说明 ShellCheck 已被主流编辑器作为集成 linter 支持,也可通过 CodeClimate、Codacy 和 CodeFactor 对 GitHub 仓库自动检查。这意味着你不必只在命令行手动运行,可以把它接入编辑器实时提示或代码托管平台的自动检查中。
常见卡点
- shebang 与语法不匹配:脚本声明
sh却用 bash 语法,会持续报可移植性警告。确认目标解释器后统一 shebang,或改写为 POSIX 兼容写法。 - 修复建议需要人工确认:自动修复对引号、变量展开等机械问题通常直接有效,但涉及逻辑意图的改动仍应逐条核对后再应用。
- 网页版只适合单脚本试用:需要批量检查或纳入 CI 时,应使用本地安装或平台集成方式。