bash код завершения команды
Доброго времени суток уважаеммые читатели! Сегодня мы поговорим про команду exit, что она из себя представляет и рассмотрим некоторые примеры.
Команда exit может выполянть две функции:
Вообще, каждая команда возврщает, так называемый «код завершения», еще его называют «возвращаемым значением». Если команды завершилась с успехом, то она должна возвратить значение 0, что означает положительно. В случае же ошибки, код возвтрата будет не равен 0 соответственно. Любое значение кроме 0, интерпрититор понимает как ошибку.
Как я описал выше, тоже самое относится и к функциям, которые расположены внутри какого-нибудь сценария и к самому сценарию. Код команды, которой завершается сценарий или функция, берется из последней завершенной команды.
Можно и вручную указать код завершения, синтаксис будет следующим:
Как команда, функция или сценарий завершился, он возвращает код завершения, который хранится в переменной $?, которая уже в свою очередь может быть использованная далее.
Теперь я приведу пример, для наглядного представления написанного:
ls # выполнится команда ls
dfdf # Просто набор букв, не представляющий никакой команды
ls # Выполнится команда ls
exit 15 # Задал код возврата 15, можно задать любое от 0 до 255
После того, как вы выполните данный скрипт, введите в терминале:
и вы получите значение 15, которое мы и задали принудительно для exit.
Bash получить код завершения команды в Linux / Unix
Я новый пользователь системы Linux. Как мне получить код завершения команды?
Как получить код вывода или статус команды оболочки Linux или Unix и сохранить его в переменной оболочки?
Введение. Каждая команда оболочки Linux или Unix возвращает состояние, когда она завершается нормально или ненормально.
Например, если скрипт backup.sh не выполнен, и он возвращает код, который сообщает скрипту оболочки отправить электронное письмо админу.
Что такое код вывода в оболочке bash?
Каждая команда Linux или Unix, выполняемая скриптом оболочки или пользователем, имеет статус вывода.
Статус вывода – это целое число.
0 состояние выхода означает, что команда была успешной без каких-либо ошибок.
Ненулевое (1-255 значений) состояние выхода означает, что команда была неудачной.
Как узнать код вывода команды
Из приведенных выше выводов ясно, что код вывода 0 означает, что команда date была успешной.
Кроме того, код вывода – 127 (не ноль), так как команда nonexistant не была успешной.
Bash как получить код завершения команды – Как использовать коды вывода в скриптах оболочки
Итак, как вы сохранить статус вывода команды в переменной оболочки?
Как мне установить код вывода для моих собственных скриптов оболочки?
Команда exit вызывает обычное завершение скриптов оболочки.
Вывод из оболочки со статусом N. Синтаксис:
Пример скрипта оболочки для получения кода завершения команды
Заключение
На этой странице показано, как использовать коды вывода в системах на основе Linux или Unix и как получить статус вывода / код команды.
Команды Exit и коды выхода в Bash
В этой статье мы рассмотрим встроенную команду exit в Bash и статусы выхода выполненных команд.
Статус выхода
Каждая команда оболочки возвращает код завершения, когда она завершается, либо успешно, либо безуспешно.
По соглашению код завершения, равный нулю, указывает, что команда выполнена успешно, а ненулевое значение означает, что произошла ошибка.
Команда date выполнена успешно, и код выхода равен нулю:
Если вы попытаетесь запустить команду ls с несуществующим каталогом, код выхода будет ненулевым:
Код состояния можно использовать для выяснения причины сбоя команды. Страница руководства каждой команды содержит информацию о кодах выхода.
При выполнении многокомпонентного конвейера состояние выхода конвейера соответствует статусу последней команды:
Команда exit в Bash
Команда exit выходит из оболочки со статусом N. Он имеет следующий синтаксис:
Если N не указан, код состояния выхода соответствует коду последней выполненной команды.
При использовании в сценариях оболочки значение, указанное в качестве аргумента команды exit, возвращается в оболочку в качестве кода завершения.
Примеры
Статус выхода команд можно использовать в условных командах, таких как if. В следующем примере grepвыйдет с нуля (что означает true в сценариях оболочки), если «search-string» находится в filename:
При запуске списка команд, разделенных &&(and) или ||(or), состояние выхода команды определяет, будет ли выполнена следующая команда в списке. Здесь команда mkdir будет выполнена только если cd вернет ноль:
Если сценарий заканчивает exit без указания параметра, код завершения сценария – это код последней команды, выполненной в сценарии.
BASH exit code
Самое частое применение — скрипты, для которых нужно предусмотреть возможность прерывания извне. Например, закончившееся пространство на диске при размещении на нем резервной копии данных. Или автоматизированный перенос сайта с одного сервера на другой.
Большая часть программ возвращают 0 при успешном выполнении и коды отличные от нуля при возникновении ошибок.
Это 1 или другой код, для каждой утилиты коды ответа описаны в документации.
Вывести код выполнения последней команды можно так:
Для демонстрации будем использовать HTML файл со случайным текстом.
Проверим равняется ли возвращаемое значение единице
Т.е. паттерн не найдем в файле. bash exit code можно просто выводить в консоль
При обнаруженном совпадении:
looki-for
0
Если совпадения нет:
Если произошла ошибка — например, отсутствует файл в котором утилите grep дано указание искать
grep: site2.html: No such file or directory
2
Коды для каждой утилиты нужно искать в документации, awk, например, всегда будет возвращать 0
Exit code может принимать значения от 0 до 256.
Exit code при написании скриптов
При написании скриптов стоит учитывать, что в приведенном выше примере речь идет об одной команде. Если это несколько команд, выполняющиеся одна за другой ошибку можно пропустить проверяя exit code одной из них.
grep: site2.html: No such file or directory
2
hey
0
Поэтому лучше всего объединять последовательность команд в отдельный скрипт или функцию и проверять код выхода скрипта или функции.
some bash code
what to do if errors detected
За счет нее также можно предусмотреть действие выполняемое в случае если bash скрипт возвращает exit code, который говорит о неуспешном выполнении.
Таким действием обычно является запись информации в лог, отправка уведомления администратору или удаление временных фйлов.
Команда exit в Bash и коды выхода
Часто при написании сценариев Bash вам необходимо завершить сценарий при выполнении определенного условия или выполнить действие на основе кода выхода команды.
В этой статье мы рассмотрим встроенную команду exit Bash и статусы выхода выполненных команд.
Статус выхода
Каждая команда оболочки возвращает код выхода, когда она завершается успешно или безуспешно.
По соглашению нулевой код выхода указывает, что команда завершилась успешно, а ненулевое значение означает, что произошла ошибка.
Команда date завершена успешно, код выхода равен нулю:
Если вы попытаетесь запустить ls в несуществующем каталоге, код выхода будет отличным от нуля:
Код состояния можно использовать для выяснения причины сбоя команды. На странице руководства каждой команды содержится информация о кодах выхода.
При выполнении многокомандного конвейера статус выхода конвейера соответствует состоянию последней команды:
Команда exit
Команда exit закрывает оболочку со статусом N Он имеет следующий синтаксис:
Если N не задано, код состояния выхода — это код последней выполненной команды.
При использовании в сценариях оболочки значение, указанное в качестве аргумента команды exit возвращается оболочке как код выхода.
Примеры
При запуске списка команд, разделенных && (И) или || (ИЛИ), статус выхода команды определяет, будет ли выполнена следующая команда в списке. Здесь команда mkdir будет выполнена, только если cd вернет ноль:
Если сценарий завершается exit без указания параметра, код выхода из сценария — это код последней команды, выполненной в сценарии.
Вот пример, показывающий, как завершить сценарий, если он запущен пользователем без полномочий root:
Выводы
Каждая команда оболочки возвращает код выхода при завершении. Команда exit используется для выхода из оболочки с заданным статусом.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.