ShellCheck:Shell 脚本 lint 工具 2026 版
ShellCheck 检查 Bash、Sh 脚本错误。检测语法、风格、潜在问题。CI/CD 集成。
- ⭐ 11000
- Shell
- Haskell
- GPL-3.0
- 更新于 2026-05-18
什么是 ShellCheck? #
ShellCheck 是检测 Bash、Sh 脚本错误的工具。检测语法、风格、潜在问题。CI/CD 集成。
安装 #
macOS #
brew install shellcheck
Ubuntu/Debian #
sudo apt-get install shellcheck
从源码 #
git clone https://github.com/koalaman/shellcheck.git
cd shellcheck
cargo build --release
基础用法 #
检查脚本 #
shellcheck deploy.sh
整理输出 #
# 机器可读
shellcheck --format=json deploy.sh
# GCC 样式
shellcheck --format=gcc deploy.sh
常见错误类型 #
Heredoc 问题 #
# 错误:缺少结束符
cat << EOF
echo "Hello"
# ShellCheck 警告 SC1016
# 修复:
cat << EOF
echo "Hello"
EOF
引号问题 #
# 错误:不完整引号
if [ $var = "test" ]; then
# ShellCheck 警告 SC2050
# 修复:
if [ "$var" = "test" ]; then
变量未定义 #
# 错误:变量可能未定义
echo $VALUE
# ShellCheck 警告 SC2154
# 修复:
: "${VALUE:?VALUE 未定义}"
echo "$VALUE"
配置文件 #
.shellcheckrc #
# 禁用特定警告
disable=SC1091,SC2034
# 警告等级
severity=warning
# 包含文件
include=./include.sh
ShellCheck Options #
| 选项 | 说明 |
|---|---|
--exclude | 排除特定代码 |
--include | 只检查特定代码 |
--severity | 警告/错误/信息 |
--format | 输出格式 |
集成 CI/CD #
GitHub Actions #
- name: ShellCheck
uses: ludeeus/action-shellcheck@master
with:
scandirs: "."
exclude: "dist/**"
GitLab CI #
shellcheck:
stage: test
image: alpine:latest
script:
- apk add shellcheck
- shellcheck **/*.sh
Docker #
FROM alpine:latest
RUN apk add shellcheck
RUN shellcheck /app/script.sh
IDE 集成 #
VS Code #
{
"shellcheck.enabled": true,
"shellcheck.executablePath": "/usr/bin/shellcheck",
"shellcheck.excludePath": "**/node_modules/**"
}
Vim/Neovim #
" Plugin: vim-syntastic
let g:syntastic_shell_sh_checkers = ['shellcheck']
编写干净脚本 #
最佳实践 #
#!/usr/bin/env bash
set -euo pipefail # 严格模式
# 定义变量
: "${API_KEY:?API_KEY 未设置}"
# 日志函数
log() {
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] $*"
}
# 错误处理
trap 'log "错误: 第 $LINENO 行"' ERR
# 主函数
main() {
log "开始执行"
# 业务逻辑
echo "Hello, World!"
}
main "$@"
高级用法 #
自定义_severity #
# .shellcheckrc
custom_severity=SC2034:W
Sourceignore #
# .shellcheck
sourceignore=/usr/lib/*
常见问题 #
Q: ShellCheck 会报哪些常见误报?
答:动态变量、源码生成、特殊用途变量。可用 # shellcheck disable 关闭。
Q: 如何确保 CI 通过?
答:shellcheck --severity=error *.sh 只做错误检查。
Q: 支持 Windows 吗?
答:通过 WSL 或 Git Bash。PowerShell 用 PSScriptAnalyzer。
总结 #
ShellCheck 让 Shell 脚本更可靠。CI/CD 中必不可少。
参考:shellcheck.net 更新:2026-05-18
💬 留言讨论