2.8.13.9 Проверка скриптов на наличие ошибок с помощью утилиты 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.