shellcheck
Shell スクリプト静的 解析 ツール。一般的 なエラーと潜在的 な問題 を検出
インストール
# macOS
brew install shellcheck
# Ubuntu/Debian
sudo apt install shellcheck
# Arch Linux
sudo pacman -S shellcheck基本使用法
# スクリプトをチェック
shellcheck script.sh
# 複数のスクリプトをチェック
shellcheck script1.sh script2.sh
# stdin から読み取り
cat script.sh | shellcheck -出力形式
# デフォルト形式(端末フレンドリー)
shellcheck script.sh
# JSON 形式
shellcheck -f json script.sh
# GCC 形式(CI 向け)
shellcheck -f gcc script.sh
# checkstyle 形式
shellcheck -f checkstyle script.shShell を指定
# bash として指定
shellcheck -s bash script.sh
# sh (POSIX) として指定
shellcheck -s sh script.sh
# zsh として指定
shellcheck -s zsh script.sh警告を除外
コマンドラインで除外
# 特定の警告を除外
shellcheck -e SC2034 script.sh
# 複数の警告を除外
shellcheck -e SC2034,SC2086 script.shスクリプト内で除外
#!/bin/bash
# shellcheck disable=SC2034
unused_var="value"
# ブロック全体を除外
# shellcheck disable=SC2086
echo $unquoted_var設定ファイルで除外
.shellcheckrc で:
disable=SC2034,SC2086常見警告コード
| 警告 コード | 説明 |
|---|---|
| SC2034 | 未使用 の変数 |
| SC2086 | 変数 がクォートされていない |
| SC2046 | コマンド置換 がクォートされていない |
| SC2155 | 宣言 と代入 を分離 すべき |
| SC2164 | cd 失敗 時の処理 がない |
| SC2006 | バッククォートの代 わりに $() を使用 |
重大度
# エラーのみを表示
shellcheck -S error script.sh
# 警告以上を表示
shellcheck -S warning script.sh
# すべてを表示(スタイル提案を含む)
shellcheck -S style script.shエディタ統合
VS Code
ShellCheck 拡張 をインストール
Vim
ALE または Syntastic プラグインを使用
.vimrc の例
let g:ale_linters = {'sh': ['shellcheck']}CI 統合
GitHub Actions
- name: ShellCheck
uses: ludeeus/action-shellcheck@master手動 CI
find . -name "*.sh" -exec shellcheck {} +