Существует ли в Bash команда TRY CATCH?

"Bash" не поддерживает команду "try/catch". Однако существуют другие способы применения ее функциональности, например, операторы "if/else", "OR", команда "trap" или флаг "-x".

Термин "try-catch" используется в программировании для обработки исключений. Проще говоря, блок "try" пытается выполнить некоторую работу, и если возникает ошибка, например, файл не найден, он выбрасывает исключение, которое может быть скопировано в блок "catch".

В данном руководстве рассматриваются подходы, которые могут быть использованы вместо команды "try/catch".

Проверьте "Статус выхода"

Все команды генерируют однозначное значение ("0" для "true" и "1" для "false"). Это делается с помощью опции "set -e". Эта опция побуждает Bash к немедленному выходу, если какая-либо команда в скрипте завершается с ненулевым кодом. В приведенном ниже примере скрипт устанавливает Firefox на систему. После успешного выполнения он выводит сообщение "Command Succeeded", как показано ниже:

Перед выполнением скрипта обязательно дайте ему права на выполнение (приведенный выше скрипт имеет имя "script.sh") с помощью команды chmod с флагом +x:

Приведенная выше команда подтверждает, что права на выполнение были предоставлены файлу "script.sh". Однако для его выполнения выполните следующую команду:

Из приведенного выше изображения видно, что команда успешно выполнена, поскольку отображается сообщение "command succeeded". Существует множество сценариев, в которых можно использовать команду echo для проверки "статуса выхода" сразу после выполнения команды.

Проверка "Статуса выхода"

Как заставить команду "trap" работать как TRY CATCH?

Команда "trap" работает на основе сигналов, посылаемых ей ОС или пользователем (нажатие клавиш "CTRL+C" для прерывания работы программы). Это триггер, который является реакцией на определенную команду. Например, приведенный ниже скрипт работает до тех пор, пока пользователь не нажмет "CTRL+C". После нажатия он выдаст сообщение "ловушка сработала" и будет спать в течение "5" секунд, после чего вернет управление пользователю:

Приведенный выше сценарий имеет имя "script.sh". Выполним его для просмотра результатов:

В приведенном выше терминале видно, что при нажатии клавиш "CTRL+C" выводится сообщение "ловушка сработала", а сценариев использования этого сценария может быть множество. Например, в приведенном ниже сценарии, когда служба запущена, он остановит и перезапустит эту службу. Предположим, что в данном случае в качестве службы выступает "mysql":

Сценарий имеет имя "script.sh". Давайте выполним его, чтобы посмотреть результат:

bash script.sh

Как видно из приведенного выше терминала, он сначала останавливает службу, а затем запускает ее снова. Если вы хотите запустить службу сразу после ее остановки, нажмите клавиши "CTRL+C":

Приведенные примеры похожи на "try/catch" тем, что сценарий с несколькими командами выполняется очень долго. Его можно устранить с помощью сочетаний клавиш "CTRL+Z", но при этом не будет выведено сообщение, напечатанное командой "echo". Зато при использовании команды "trap" легче определить, какая команда работает нормально, а какая нет.

Как отследить вывод с помощью флага "-x" в Bash?

Флаг "-x" используется для отладки сценария bash. Он интерпретирует каждую выполняемую строку и отображает все, что есть в скрипте. Чтобы воспользоваться им, добавьте при выполнении команды предшествующее "-x", как показано ниже:

В результате параметры скрипта будут отображаться в том же формате, в котором он выполняется.

отследить вывод с помощью флага "-x" в Bash

Как принудительно завершить работу при обнаружении ошибки в Bash?

Для выхода из системы в bash используется "set" в сочетании с "errexit" или "-e". Это означает автоматическое завершение команды при возникновении ошибки. Эта опция предписывает "Bash" немедленно завершать сценарий, когда любая команда возвращает ненулевой статус выхода, указывающий на ошибку.

Ниже приведен пример сценария, в котором обновляются системные репозитории, устанавливается Python, клонируется git, устанавливаются требования для Python и, наконец, запускается сервер:

Он имеет имя "script.sh". Для его выполнения выполните приведенную ниже команду, как описано ниже:

Указанные выше "Имя пользователя" и "Пароль" для GitHub являются неверными, что приведет к ошибке, в результате которой скрипт будет завершен, как показано ниже:

ринудительно завершить работу при обнаружении ошибки в Bash

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

Заключение

Сценарии bash не поддерживают операторы "try/catch", как большинство других языков кодирования. Тем не менее, существуют другие альтернативы для применения той же функциональности, такие как проверка "статуса выхода", применение команды "trap" или трассировка вывода с помощью флага "-x", которые также могут быть полезны. Кроме того, скрипт может быть немедленно завершен при возникновении ошибки с помощью команды "set -e". В данном руководстве было рассмотрено состояние команды "try/catch" в bash и ее альтернативы.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий