ShellCheck – это бесплатный инструмент статического анализа с открытым исходным кодом, который можно использовать для проверки и улучшения скриптов.
Он способен выделять как общие, так и граничные ошибки и предлагать соответствующие исправления.
ShellCheck может использоваться как онлайновая или системная утилита, а также может быть интегрирован в качестве линтера в различные текстовые редакторы.
В этом руководстве мы узнаем, как установить и использовать ShellCheck в некоторых наиболее распространенных дистрибутивах Linux, а также как интегрировать его в Vim и Visual Studio Code.
- 🕵️ Scanmycode-Ce: Сканирование кода/SAST/Статический анализ/Linting с использованием многих инструментов/сканеров
- 🕵️ Njsscan : Семантический инструмент SAST, который может находить небезопасные паттерны кода в приложениях Node.js
- 🐛 SAST или DAST: Что лучше использовать для тестирования безопасности приложений
Установка
Прежде всего, давайте установим ShellCheck на нашу любимую систему на базе Linux.
Это очень простая задача, поскольку утилита упакована в программные репозитории наиболее используемых дистрибутивов.
Все, что нам нужно сделать, это использовать соответствующий менеджер пакетов.
На Fedora, например, мы будем использовать dnf:
В системах на базе Debian вместо этого мы используем apt:
В Archlinux мы используем pacman:
Использование
Использовать ShellCheck очень просто.
Чаще всего мы просто вызываем команду и передаем в качестве аргумента путь к скрипту, который хотим проверить.
Приведем пример.
В следующем фрагменте вы можете видеть, что мы пропустили кавычки в переменной shell.
Это распространенная ошибка, которая, в зависимости от обстоятельств, может быть опасной:
#!/bin/bash text=”this is the text” echo $text
Мы сохраним приведенный выше код в файле script.sh.
Чтобы проверить его с помощью ShellCheck, мы просто передадим его в качестве аргумента утилите:
Результатом выполнения приведенной выше команды будет следующее:
In script.sh line 5: echo $text ^---^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: echo "$text" For more information: https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
Как видите, ошибка найдена и выделена правильно.
Ошибка идентифицируется определенным кодом, в данном случае это SC2086, и для нее дается краткое описание.
Более подробную информацию можно получить, просто нажав на предоставленную ссылку, которая указывает на соответствующую страницу ShellCheck Wiki:
ShellCheck, помимо всего прочего, также способен обнаруживать “башизмы”: нестандартные особенности, характерные для оболочки Bash.
Мы получаем предупреждение, когда не указываем явно Bash в качестве интерпретатора оболочки. \
Например, посмотрите на этот пример:
#!/bin/sh # Prints the current date and time function now() { date ‘+%Y/%m/%d %H:%M’ }
Если мы запустим ShellCheck с этим кодом, то получим следующий результат:
In date.sh line 4: function now() { ^-- SC2112 (warning): 'function' keyword is non-standard. Delete it. For more information: https://www.shellcheck.net/wiki/SC2112 -- 'function' keyword is non-standar...
Хотя в коде нет ошибок, ShellCheck предупреждает нас, потому что мы использовали ключевое слово “function” для создания функции: этот синтаксис специфичен для bash, но мы не указали bash в качестве интерпретатора скриптов (мы использовали /bin/sh, который в некоторых дистрибутивах, например Ubuntu, является символической ссылкой, указывающей на оболочку “dash”).
Хотя в коде нет ошибок, ShellCheck предупреждает нас, потому что мы использовали ключевое слово “function” для создания функции: этот синтаксис специфичен для bash, но мы не указали bash в качестве интерпретатора сценариев (мы использовали /bin/sh, который в некоторых дистрибутивах, например Ubuntu, является символической ссылкой, указывающей на оболочку “dash”).
Использование онлайн-версии ShellCheck
Если по каким-то причинам мы не можем или не хотим устанавливать ShellCheck на нашу систему, мы можем проверить наши скрипты онлайн, используя веб-версию ShellCheck.
Все, что нам нужно сделать, это вставить наш код в онлайн-редактор.
Под ним появятся предупреждения:
Это поведение можно повторить в большинстве текстовых редакторов, интегрировав ShellCheck в качестве линтера.
Давайте посмотрим, как это сделать.
Интеграция ShellCheck в текстовые редакторы
ShellCheck может быть интегрирован в некоторые из наиболее используемых текстовых редакторов в качестве линтера.
Давайте посмотрим несколько примеров.
Интеграция ShellCheck в Vim
Чтобы использовать ShellCheck в качестве линтера непосредственно в Vim, сначала нужно установить плагин линтинга.
Одним из самых популярных и современных вариантов на момент написания статьи является ALE.
Плагин использует асинхронные возможности Neovim и Vim >= 8.
Есть много способов установить его, используя один из многочисленных менеджеров плагинов Vim или встроенную систему загрузки плагинов Vim.
После установки плагина Vim linter и ShellCheck мы можем визуализировать предупреждения и предложения прямо из интерфейса редактора!
Интеграция ShellCheck в Visual Studio Code
Visual Studio Code – это текстовый редактор, созданный компанией Microsoft и разработанный с использованием фреймворка Electron.
📜 Как установить VSCode на Kali Linux
Он основан на проекте с открытым исходным кодом Code-OSS и благодаря большой экосистеме плагинов может быть легко превращен в IDE для наиболее используемых языков программирования (Javascript прежде всего).
Для интеграции ShellCheck в Visual Studio Code достаточно найти плагин “shellcheck” прямо в интерфейсе редактора и нажать на кнопку “install”:
ShellCheck также может быть интегрирован в другие текстовые редакторы, такие как Sublime Text и Emacs: инструкции можно найти в специальном разделе README ShellCheck.
Заключение
В этом руководстве мы рассмотрели, как установить и использовать ShellCheck для отладки и улучшения наших shell-скриптов.
ShellCheck – это инструмент статического анализа, который легко устанавливается во все наиболее используемые дистрибутивы Linux и может использоваться из командной строки или из различных текстовых редакторов с помощью специальных плагинов.
В этом руководстве мы рассмотрели, как использовать ShellCheck в качестве отдельного инструмента из командной строки, а также как интегрировать его в Vim и Visual Studio Code.
см. также:
- 🔎 Мониторинг использования системных ресурсов Linux с помощью SysMonTask
- 📜 Перемещение вверх или вниз Vim
- 🐧 Как изменить цвет комментария в Vim – исправить нечитаемый синий цвет
- 📜 Как копировать и вставлять строки вставки в vim