Часто при написании сценариев Bash вам необходимо завершить сценарий при выполнении определенного условия или выполнить действие на основе кода выхода команды.
В этой статье мы рассмотрим встроенную команду exit
Bash и статусы выхода выполненных команд.
Статус выхода
Каждая команда оболочки возвращает код выхода, когда она завершается успешно или безуспешно.
По соглашению нулевой код выхода указывает, что команда завершилась успешно, а ненулевое значение означает, что произошла ошибка.
Специальная переменная $?
возвращает статус выхода последней выполненной команды:
date &> /dev/null
echo $?
Команда date
завершена успешно, код выхода равен нулю:
0
Если вы попытаетесь запустить ls
в несуществующем каталоге, код выхода будет отличным от нуля:
ls /nonexisting_dir &> /dev/null
echo $?
2
Код состояния можно использовать для выяснения причины сбоя команды. На странице руководства каждой команды содержится информация о кодах выхода.
При выполнении многокомандного конвейера статус выхода конвейера соответствует состоянию последней команды:
sudo tcpdump -n -l | tee file.out
echo $?
В приведенном выше примере echo $?
напечатает код выхода команды tee
.
Команда exit
Команда exit
закрывает оболочку со статусом N
Он имеет следующий синтаксис:
exit N
Если N
не задано, код состояния выхода — это код последней выполненной команды.
При использовании в сценариях оболочки значение, указанное в качестве аргумента команды exit
возвращается оболочке как код выхода.
Примеры
Статус выхода команд может использоваться в условных командах, таких как if
. В следующем примере grep
завершит работу с нулем (что означает истину в сценариях оболочки), если «строка поиска» найдена в 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
без указания параметра, код выхода из сценария — это код последней команды, выполненной в сценарии.
#!/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
используется для выхода из оболочки с заданным статусом.
Добавить комментарий