Обработка ошибок и статус выхода
Реализуйте надёжную проверку ошибок в скриптах, разбираясь со статусами выхода и используя «set -e» и условную логику.
«Обработка ошибок и статус выхода» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Добро пожаловать в обработку ошибок
На этом уроке вы сделаете свои скрипты Bash более надёжными, научившись эффективно обрабатывать ошибки.
Представьте скрипт, который выполняет множество шагов. Если один шаг завершится неудачно, вы наверняка захотите, чтобы скрипт остановился или хотя бы сообщил об ошибке, верно? Именно для этого нужна обработка ошибок!
Что такое статус завершения?
Каждая команда, которую вы выполняете в оболочке Linux, возвращает статус завершения (его также иногда называют кодом завершения или кодом возврата).
- Статус 0 означает, что команда завершилась успешно.
- Ненулевой статус (например, 1, 2 или 127) указывает на некоторую ошибку или неудачное выполнение.
Это похоже на светофор для ваших команд!
Проверка статуса завершения вручную
Вы можете проверить статус завершения последней выполненной команды с помощью специальной переменной $?.
Попробуем выполнить успешную команду и команду с ошибкой:
#!/bin/bash
echo "Hello CoddyKit"
echo "Exit status: $?"
ls non_existent_file.txt
echo "Exit status: $?"Базовая условная проверка ошибок
Знание статуса завершения позволяет скрипту принимать решения. Вы можете использовать оператор if, чтобы проверить $? и отреагировать на ошибки.
Благодаря этому скрипт распознаёт проблемы и не продолжает работу с некорректными данными.
#!/bin/bash
ls non_existent_file.txt
if [ $? -ne 0 ]; then
echo "Error: The 'ls' command failed!"
exit 1 # Exit script with an error code
fi
echo "This line will not run if 'ls' fails."Возможности `set -e`
Проверять $? после каждой команды вручную может быть утомительно. Здесь пригодится set -e!
Если запустить скрипт с set -e, Bash немедленно завершит работу, если любая команда (не являющаяся частью условной проверки) завершится с ненулевым статусом.
Это универсальный защитный переключатель для ваших скриптов!
`set -e` в действии
Посмотрим, как set -e не позволяет скрипту продолжить работу после ошибки. Обратите внимание: до последней команды echo выполнение никогда не дойдёт.
#!/bin/bash
set -e
echo "Starting important tasks..."
# This command will fail
cp /non_existent_source /tmp/destination
echo "This line will NOT be printed if 'cp' fails."
echo "All tasks completed successfully."Когда `set -e` не останавливает выполнение
set -e — мощный инструмент, но он подчиняется определённым правилам. Он не завершит скрипт, если команда с ошибкой:
- является частью условия
ifилиwhile; - является частью списка
&&или||(кроме последней команды); - предваряется символом
!.
Эти контексты предназначены для проверки успешного или неудачного выполнения, поэтому `set -e` им не мешает.
Объединение `set -e` с `||`
Иногда перед завершением нужно вывести собственное сообщение об ошибке. Можно объединить set -e с оператором || (OR).
command || { echo "Error message"; exit 1; }
Если command завершится с ошибкой, выполнится часть после ||, выведет ваше сообщение, а затем завершит работу с определённым кодом ошибки.
#!/bin/bash
set -e
echo "Attempting to find a file..."
find /non_existent_dir -name "*.txt" || \
{ echo "ERROR: Could not search in /non_existent_dir!"; exit 1; }
echo "Script continued (this won't print if 'find' fails)."Обработка определённых кодов завершения
Хотя 0 означает успех, а ненулевое значение — ошибку, разные ненулевые коды могут иметь разные значения.
1: общая ошибка.2: неправильное использование встроенных команд оболочки.127: команда не найдена.
Вы можете использовать if [ $? -eq 127 ], чтобы проверять конкретные типы ошибок и выводить более подходящие сообщения.
Тест по обработке ошибок
Какое из следующих утверждений о статусах завершения Bash и обработке ошибок является TRUE?
Повторение: надёжные скрипты
Вы научились делать свои скрипты Bash гораздо надёжнее!
- Каждая команда возвращает статус завершения (0 при успехе и ненулевое значение при ошибке).
- Переменная
$?содержит статус завершения последней команды. set -e— мощный инструмент, который автоматически завершает скрипт при большинстве ошибок команд.- Объединяйте
set -eс||, чтобы выводить собственные сообщения об ошибках.
Эти методы помогут вам писать более профессиональные и стабильные скрипты.
Часто задаваемые вопросы
Урок «Обработка ошибок и статус выхода» бесплатный?
Да — полный текст урока «Обработка ошибок и статус выхода» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Обработка ошибок и статус выхода»?
Реализуйте надёжную проверку ошибок в скриптах, разбираясь со статусами выхода и используя «set -e» и условную логику. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Обработка ошибок и статус выхода»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Отладка скриптов Bash (set -x, trap)
- Обработка ошибок и статус выхода
- Рекомендации по написанию скриптов и статический анализ
- Тестирование скриптов Bash с помощью Bats