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 的价值就在于在运行前把这些隐患暴露出来。

网页版怎么用

网页版是最低门槛的试用方式,流程只有三步:

  1. 打开 shellcheck.net,页面中部有一个脚本编辑区(基于 Ace 编辑器)。
  2. 把脚本粘贴进去,或点击“Load random example”载入官方示例。
  3. 下方输出窗口会显示 ShellCheck 的分析结果;部分问题提供“Apply fixes”自动修复入口。

预期结果是:输出窗口从空白变为带行号和规则说明的警告列表。常见卡点有两个:一是脚本较长时编辑器加载需要一点时间;二是网页版适合单次检查,不适合批量或持续集成场景。

本地安装与集成方式

官网明确给出了多种安装渠道,可按你的环境选择:

使用场景 方式 说明
本地命令行检查 apt、dnf、pkg、brew、cabal 官网列出的包管理器安装方式,装好后可在终端直接分析脚本文件
编辑器内实时提示 主流编辑器的集成 linter 官网称已支持主要编辑器,写脚本时即可看到警告
代码托管自动检查 CodeClimate、Codacy、CodeFactor 用于自动检查 GitHub 仓库中的脚本
源码与文档 GitHub、ShellCheck Wiki 规则说明和项目源码均可查阅

选择建议:只是偶尔检查一段脚本,用网页版即可;如果脚本是项目的一部分、需要每次提交都检查,优先考虑编辑器集成或代码托管平台的自动检查,避免依赖人工粘贴。

使用前需要知道的边界

ShellCheck 是静态分析工具,它给出的是基于规则的警告,不是运行时验证。脚本逻辑是否正确、外部命令行为是否符合预期,仍需实际运行确认。另外,官网页面提到工具以 GPLv3 发布、用 Haskell 编写,这些属于项目背景信息;页面中出现的 BashSupport Pro 等赞助方链接,不代表 ShellCheck 本身提供付费版本,页面也未说明收费或登录限制。