
Часто при написании скриптов Bash вам потребуется завершить выполнение скрипта при выполнении определенного условия или выполнить действие в зависимости от кода завершения команды.
В этой статье мы рассмотрим встроенную команду Bash exit и статусы выхода выполненных команд.
статуса выхода
Каждая команда оболочки возвращает код выхода при своем завершении, будь то успешном или неудачном.
По соглашению, код выхода, равный нулю, указывает на то, что команда выполнена успешно, а ненулевой код означает, что произошла ошибка.
Специальная переменная $? возвращает статус завершения последней выполненной команды:
date &> /dev/nullecho $?
Команда date выполнена успешно, код выхода равен нулю:
0
Если вы попытаетесь запустить ls для несуществующего каталога, код выхода будет ненулевым:
ls /nonexisting_dir &> /dev/nullecho $?
2
Код состояния можно использовать для определения причины сбоя команды. Информация о кодах завершения каждой команды представлена на странице руководства.
При выполнении многокомандного конвейера статусом выхода конвейера является статус последней команды:
sudo tcpdump -n -l | tee file.outecho $?
В приведенном выше примере echo $? выведет код выхода команды tee .
Команда exit Bash
Команда exit завершает работу оболочки со статусом N Она имеет следующий синтаксис:
exit N
Если N не указано, код статуса выхода будет соответствовать коду последней выполненной команды.
При использовании в скриптах оболочки значение, переданное в качестве аргумента команде exit , возвращается оболочке как код выхода.
Примеры
Статус завершения команд можно использовать в условных командах, например, if . В следующем примере grep завершит работу с нулём (что означает true в скриптах оболочки), если «строка поиска» найдена в filename :
if grep -q "search-string" filename then echo "String found." else echo "String not found." fi
При запуске списка команд, разделённых символами && (И) или || (ИЛИ), статус завершения команды определяет, будет ли выполнена следующая команда в списке. В данном случае команда mkdir будет выполнена только в том случае, если cd вернёт ноль:
cd /opt/code && mkdir project
Если скрипт завершается exit без указания параметра, то кодом выхода скрипта будет код последней выполненной в скрипте команды.
~/script.sh
#!/bin/bash echo "doing stuff..." exit
Использование только exit равнозначно exit $? или пропуску exit .
Вот пример, показывающий, как завершить скрипт, если он вызван не-root пользователем:
#!/bin/bash if [[ " $( whoami ) " ! = root ]] ; then echo "Only user root can run this script." exit 1 fi echo "doing stuff..." exit 0
Если вы запустите скрипт от имени пользователя root, код выхода будет равен нулю. В противном случае скрипт завершится со статусом 1 .
Заключение
Каждая команда оболочки возвращает код выхода при завершении. Команда exit используется для выхода из оболочки с заданным статусом.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства