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

💬 留言讨论