bash exit code и их использование в скриптах

bash exit code — код, которым завершается выполнение скрипта. В случае успешного выполнения это 0, если произошли какие-то ошибки код отличается. Этот код можно считывать и планировать логику в зависимости от него.

BASH exit code

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

Большая часть программ возвращают 0 при успешном выполнении и коды отличные от нуля при возникновении ошибок.

Это 1 или другой код, для каждой утилиты коды ответа описаны в документации.

Вывести код выполнения последней команды можно так:

echo $?

Для демонстрации будем использовать HTML файл со случайным текстом.

mcedit site.html

<html>

looki-for
</html>

Проверим равняется ли возвращаемое значение единице

grep 'looky-for' site.html ; if (( `echo $?` == 1 )); then echo ONE; fi

ONE

Т.е. паттерн не найдем в файле. bash exit code можно просто выводить в консоль

При обнаруженном совпадении:

grep 'looki-for' site.html ; echo $?

looki-for
0

Если совпадения нет:

grep 'lookri-for' site.html ; echo $?

1

Если произошла ошибка — например, отсутствует файл в котором утилите grep дано указание искать

grep 'looki-for' site2.html ; echo $?

grep: site2.html: No such file or directory
2

Коды для каждой утилиты нужно искать в документации, awk, например, всегда будет возвращать 0

Exit code может принимать значения от 0 до 256.

Exit code при написании скриптов

При написании скриптов стоит учитывать, что в приведенном выше примере речь идет об одной команде. Если это несколько команд, выполняющиеся одна за другой ошибку можно пропустить проверяя exit code одной из них.

grep 'looki-for' site2.html ; echo $? ; echo 'hey'; echo $?

grep: site2.html: No such file or directory
2
hey
0

Поэтому лучше всего объединять последовательность команд в отдельный скрипт или функцию и проверять код выхода скрипта или функции.

Также можно использовать конструкцию set -e/trap:

set -e

      some bash code

trap

      what to do if errors detected

За счет нее также можно предусмотреть действие выполняемое в случае если bash скрипт возвращает exit code, который говорит о неуспешном выполнении.

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