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, который говорит о неуспешном выполнении.
Таким действием обычно является запись информации в лог, отправка уведомления администратору или удаление временных фйлов.