Последние новости:

Поиск по сайту:

То, что не убьет тебя, сделает тебя сильным (Ф. Ницше).

Команды Exit и коды выхода в Bash1 мин для чтения

FavoriteLoadingДобавить в избранное
09.06.2020
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 используется для выхода из оболочки с заданным статусом.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно

Статьи партнеров:

Рекомендуемое
С бесконечным множеством передовых инструментов и методов для привлечения новых…
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close