← Ко всем open source проектам

ShellCheck

koalaman/shellcheck

ShellCheck — статический анализатор shell-скриптов, который находит ошибки Bash и sh до запуска.

Форки 1,932
Автор koalaman
Язык Haskell
Лицензия GPL-3.0
Обновлено 2026-06-27

Что это такое

ShellCheck — статический анализатор shell-скриптов. Он читает Bash/sh-код и предупреждает о типичных ошибках: неверном quoting, несуществующих переменных, опасных подстановках, несовместимом синтаксисе и странных условиях.

Shell-скрипты часто пишут быстро и запускают в важных местах: деплой, сборка, резервное копирование, настройка серверов. Ошибка в одной строке может удалить не те файлы или сломать выпуск. ShellCheck снижает этот риск до запуска.

Как устроен подход

Инструмент не выполняет скрипт, а анализирует его текст. Он показывает предупреждения с кодами, объяснениями и рекомендациями. Это удобно для редактора, CI и pre-commit-проверок.

ShellCheck особенно полезен там, где shell используется как клей между инструментами. Даже опытные разработчики ошибаются в пробелах, кавычках и поведении glob-паттернов.

Проверка скрипта

Пример показывает обычное использование: сначала анализируем файл, затем исправляем предупреждения до запуска на реальной системе.

Язык: Bash
shellcheck deploy.sh
shellcheck --severity=warning scripts/*.sh

Что внутри репозитория

Репозиторий содержит анализатор на Haskell, документацию, тесты, инструкции по установке, интеграции с редакторами и примеры подключения к сборке.

Для команды ценность ShellCheck в том, что он превращает неявные shell-ловушки в явные предупреждения. Это особенно важно для скриптов, которые редко меняются, но запускаются в критический момент.

Практический контекст

Лучше всего подключать ShellCheck автоматически: в редактор, проверку перед коммитом или CI. Ручной запуск полезен, но легко забывается.

Не каждое предупреждение означает немедленную ошибку. Иногда есть осознанное исключение, но его стоит явно зафиксировать, чтобы следующий человек понял причину.

Почему ошибки shell так дороги

Shell-скрипты часто живут в местах, где ошибка заметна поздно: сборка, установка, обслуживание сервера, перенос файлов, запуск задач по расписанию. Неправильные кавычки или неочевидное поведение переменной могут сломать процесс уже после запуска.

ShellCheck ценен тем, что ловит такие проблемы до выполнения. Он предупреждает о кавычках, переносимости, неиспользуемых переменных, странных проверках и конструкциях, которые выглядят корректно, но ведут себя иначе в разных оболочках.

Ограничение в том, что статический анализатор не знает всю бизнес-логику. Иногда предупреждение нужно осознанно подавить, но хорошая практика — сначала понять причину, а не автоматически отключать правило.

Репозиторий полезен почти любому проекту, где есть install-скрипты, CI-команды, обслуживание серверов или маленькие автоматизации. Shell выглядит простым, но именно поэтому в нем легко ошибиться незаметно.

Особенно хорошо ShellCheck работает как часть привычной проверки перед изменением: локально, в редакторе или в CI. Тогда мелкие ошибки не доходят до сервера и не становятся ночной аварией.

Сильные стороны и ограничения

Сильная сторона — быстрый поиск частых ошибок shell. Ограничение — анализатор не знает весь контекст окружения и не заменяет тестовый запуск скрипта.