2.8.12.8 Проверка скриптов на наличие ошибок с помощью утилиты ShellCheck
Установка
Синтаксис
Опции
Пример использования
Окружение
- Версия РЕД ОС: 7.3
- Конфигурация: Рабочая станция, Сервер графический, Сервер минимальный
- Версия ПО: ShellCheck-0.9.0-2
ShellCheck — это утилита для статического анализа скриптов Bash, которая помогает находить ошибки и потенциальные уязвимости в коде. Она анализирует код на наличие ошибок, дает подсказки по форматированию кода и используется разработчиками для улучшения качества своих сценариев.
Рекомендации по использованию утилиты ShellChec можно найти на официальном сайте проекта в разделе Wiki https://www.shellcheck.net/wiki/.
Установка
Для установки утилиты необходимо выполнить команду (потребуются права администратора):
sudo dnf install ShellCheck
Синтаксис
Утилита доступна для запуска через терминал при помощи команды следующего вида:
shellcheck [<опции>] <файл>
Опции
Основные опции утилиты:
Опции | Описание |
---|---|
-a, --check-sourced | Обычно shellcheck предупреждает только о проблемах в указанных файлах. С помощью этой опции будут также сообщаться о любых проблемах в исходных файлах. |
-C, --color | Использовать цвет (автоматически, всегда, никогда). По умолчанию - автоматически. |
-i, --include | Рассматривать только указанные коды. |
-e, --exclude | Исключить указанные коды. |
-f, --format | Формат вывода (checkstyle, diff, gcc, json, json1, quiet, tty). |
--list-optional | Вывести список дополнительных проверок, отключенных по умолчанию. |
--norc | Не искать файлы конфигурации .shellcheckrc. |
-o, --enable | Включите необязательные проверки (или all). |
-P, --source-path | Указывать пути для поиска исходных файлов. |
-s, --shell | Указать диалект (sh, bash, dash, ksh). |
-S, --severity | Минимальный уровень ошибок для рассмотрения (ошибка, предупреждение, информация, стиль). |
-V, --version | Показать информацию о версии. |
-W, --wiki-link-count | Количество ссылок на вики-страницу с дополнительной информацией. |
-x, --external-sources | Использовать любой файл в качестве источника. |
--help | Показать справку. |
Пример использования
Рассмотрим создание и проверку Bash-скрипта с использованием утилиты shellcheck.
1. Для создания bash-скрипта введите команду:
nano script.sh
2. Вставьте в файл следующие строки и сохраните файл:
#!/bin/bash
#declare variables
MINARGS=2
E_NOTROOT=50
E_MINARGS=100
#echo values of variables
echo $MINARGS
echo $E_NONROOT
exit 0;
3. Сохраните изменения. Сделайте скрипт исполняемым:
chmod +x script.sh
4. Проверьте скрипт с помощью shellcheck:
shellcheck ./script.sh In ./script.sh line 4: E_NOTROOT=50 ^-------^ SC2034: E_NOTROOT appears unused. Verify use (or export if used externally). In ./script.sh line 5: E_MINARGS=100 ^-------^ SC2034: E_MINARGS appears unused. Verify use (or export if used externally). In ./script.sh line 9: echo $E_NONROOT ^--------^ SC2153: Possible misspelling: E_NONROOT may not be assigned, but E_NOTROOT is. ^--------^ SC2086: Double quote to prevent globbing and word splitting. Did you mean: echo "$E_NONROOT" For more information: https://www.shellcheck.net/wiki/SC2034 -- E_MINARGS appears unused. Verify ... https://www.shellcheck.net/wiki/SC2153 -- Possible misspelling: E_NONROOT m... https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
Утилита выдаст предупреждения и рекомендации по улучшению скрипта:
Предупреждение SC2034 означает, что переменная E_NOTROOT была объявлена, но нигде не используется в скрипте. Ее можно удалить.
SC2034: аналогичное предупреждение для переменной E_MINARGS. Она тоже объявлена, но не используется.
SC2153: переменная E_NONROOT не была объявлена ранее, но вместо нее существует переменная E_NOTROOT.
SC2086: рекомендуется заключать переменную в двойные кавычки ("$E_NONROOT"), чтобы предотвратить возможные проблемы с интерпретацией пробелов и специальных символов.
5. Для исправления ошибок внесите изменения в скрипт:
#!/bin/bash
#declare variables
E_NOTROOT=50
#echo values of variables
echo $E_NOTROOT
exit 0
6. После внесения исправлений повторите проверку с помощью команды:
shellcheck ./script.sh
Теперь утилита не должна выдавать никаких предупреждений, и скрипт будет готов к использованию.
Дата последнего изменения: 21.02.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.