ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Команды Exit и коды выхода в Bash

Bash Heredoc

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

В этой статье мы рассмотрим встроенную команду exit в Bash и статусы выхода выполненных команд.

 

Статус выхода

Каждая команда оболочки возвращает код завершения, когда она завершается, либо успешно, либо безуспешно.

По соглашению код завершения, равный нулю, указывает, что команда выполнена успешно, а ненулевое значение означает, что произошла ошибка.

Специальная переменная $? возвращает состояние выхода последней выполненной команды:

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 в сценариях оболочки), если «search-string» находится в filename:

if grep -q "search-string" filename then
  echo "Строка найдена."
else
  echo "Строка не найдена."
fi

 

При запуске списка команд, разделенных &&(and) или ||(or), состояние выхода команды определяет, будет ли выполнена следующая команда в списке. Здесь команда 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 "Только пользователь root может запустить этот скрипт."
  exit 1
fi

echo "занимаюсь всякой ерундой..."

exit 0

 

Если вы запустите скрипт как root, код выхода будет нулевым. В противном случае скрипт выйдет со статусом 1.

 

Вывод

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Exit mobile version