Молчаливый скрипт — это уже проблема
Каждый раз, когда команда в Linux завершает работу, она возвращает число в диапазоне от 0 до 255. Это единственный способ, которым скрипт сообщает миру: «всё в порядке» или «что-то пошло не так».
0 означает успех. Любое другое значение — это ошибка.
Что бывает, если системы нет
Скрипт завершился с кодом 1. И что это должно значить? Ничего не ясно. Другой скрипт завершился с 1. Тоже непонятно, хотя это уже совсем другой сценарий. CI/CD pipeline видит ошибку, но не понимает, как действовать дальше. Отладка превращается в гадание.
Как сделать это нормально: диапазоны
Разделите коды по смысловым группам:
0 -> успех
1-9 -> общие ошибки
10-19 -> плохие аргументы / входные данные
20-29 -> ошибки файловой системы
30-39 -> сеть
40-49 -> права доступа
50-99 -> внутренние ошибкиКоды 126-255 уже зарезервированы системой. Их лучше не использовать.
Давайте кодам понятные имена
Не пишите exit 20. Лучше оформить так:
EXIT_FILE_NOT_FOUND=20
EXIT_PERMISSION_DENIED=40
EXIT_NETWORK_FAIL=30Так скрипт становится самодокументируемым. Через несколько месяцев вы сами себе за это скажете спасибо.
Вынесите коды в отдельный файл
Если у вас несколько скриптов, создайте exit_codes.sh и подключайте его через source exit_codes.sh.
Внешние команды нужно проверять всегда:
cp file1 file2
if [ $? -ne 0 ]; then
echo "Копирование не удалось" >&2
exit $EXIT_FILE_WRITE_ERROR
fiНикогда не пропускайте статус выхода внешних команд. Ошибки, о которых ничего не сказано, обычно самые неприятные.
Описывайте ошибки в документации. Проверяйте не только успешные сценарии, но и падения. И оставляйте запас в диапазонах кодов на будущие случаи.
Именно такие мелочи отличают скрипт «на коленке» от production-ready инструмента.