Поиск по сайту:
Никто не обнимет необъятного (К. Прутков).

Обработка ошибок Bash

20.01.2023
Обработка ошибок Bash

Обработка ошибок — очень важная часть любого языка программирования. У Bash нет лучшего варианта, чем другие языки программирования, для обработки ошибки скрипта. Но важно, чтобы скрипт Bash был безошибочным во время выполнения скрипта из терминала. Функция обработки ошибок может быть реализована для сценария Bash несколькими способами. В этой статье показаны различные методы обработки ошибок в сценарии Bash.

 

Пример 1. Обработка ошибок с использованием условного оператора

Создайте файл Bash со следующим сценарием, который показывает использование условного оператора для обработки ошибок. Первый оператор «if» используется для проверки общего количества аргументов командной строки и вывода сообщения об ошибке, если значение меньше 2. Затем значения делимого и делителя берутся из аргументов командной строки. Если значение делителя равно 0, генерируется ошибка, и сообщение об ошибке печатается в файле error.txt. Вторая команда «if» используется для проверки того, является ли файл error.txt пустым или нет. Сообщение об ошибке печатается, если файл error.txt не пуст.

#!/bin/bash
#Проверить значения аргументов
if [ $# -lt 2 ]; then
   echo "Отсутствует один или несколько аргументов."
   exit
fi
#Чтение значения делимого из первого аргумента командной строки
dividend=$1
#Читание значения делителя из второго аргумента командной строки
divisor=$2
#Деление делимого на делитель
result=`echo "scale=2; $dividend/$divisor"|bc 2>error.txt`
#Читать содержимое файла ошибки
content=`cat error.txt`
if [ -n "$content" ]; then
  #Распечатать сообщение об ошибке, если файл error.txt непустой
  echo "Произошла ошибка, кратная нулю."
else
  #Распечатать результат
  echo "$dividend/$divisor = $result"

Вывод:

Следующий вывод появляется после выполнения предыдущего скрипта без каких-либо аргументов:

andreyex@andreyex:-/Desktop/bash$ bash error1.bash 
One or more argument is missing. 
andreyex@andreyex:~/Desktop/bash$

 

Читать  Как использовать $IFS в Bash?

Следующий вывод появляется после выполнения предыдущего скрипта с одним значением аргумента:

andreyex@andreyex:-/Desktop/bash$ bash error1.bash 75 
One or more argument is missing. 
andreyex@andreyex:~/Desktop/bash$

 

Следующий вывод появляется после выполнения предыдущего скрипта с двумя допустимыми значениями аргумента:

andreyex@andreyex:-/Desktop/bash$ bash error1.bash 
75 8 75/8 = 9.37 
andreyex@andreyex:-/Desktop/bash$

 

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

andreyex@andreyex:~/Desktop/bash$ bash error1.bash 75 0 
Divisible by zero error occurred. 
andreyex@andreyex:~/Desktop/bash$

Пример 2: Обработка ошибок с использованием кода состояния выхода

Создайте файл Bash со следующим сценарием, который показывает использование обработки ошибок Bash по коду состояния выхода. Любая команда Bash принимается в качестве входного значения, и эта команда выполняется позже. Если код состояния выхода не равен нулю, печатается сообщение об ошибке. В противном случае печатается сообщение об успешном выполнении.

#!/bin/bash

#Взять имя команды Linux
echo -n "Введите команду: "
read cmd_name
#Выполнить команду
$cmd_name
#Проверить, действительна ли команда,
if [ $? -ne 0 ]; then
   echo "$cmd_name - недопустимая команда."
else
   echo "$cmd_name является корректной командой."
fi

fi

 

Вывод:

Следующий вывод появляется после выполнения предыдущего скрипта с допустимой командой. Здесь «data» принимается как команда во входном значении, которая является допустимой:

andreyex@andreyex:-/Desktop/bash$ bash error2.bash

Enter a command: date 
Tue Dec 27 19:18:39 +06 2022 
date is a valid command. 

andreyex@andreyex:-/Desktop/bash$

 

Следующий вывод появляется после выполнения предыдущего скрипта для недопустимой команды. Здесь «cmd» воспринимается как недопустимая команда во входном значении:

andreyex@andreyex:-/Desktop/bash$ bash error2.bash

Enter a command: cmd
error2.bash: line 7: cmd: command not found cmd is a invalid command.

andreyex@andreyex: -/Desktop/bash$

 

Читать  Как изменить имя хоста в Oracle Linux 8

Пример 3: остановить выполнение при первой ошибке

Создайте файл Bash со следующим сценарием, который показывает метод остановки выполнения при появлении первой ошибки сценария. В следующем скрипте используются две недопустимые команды. Таким образом, выдаются две ошибки. Сценарий останавливает выполнение после выполнения первой недопустимой команды с помощью команды «set -e».

#!/bin/bash
#Установите параметр для завершения скрипта при первой ошибке
set -e
echo 'Текущие дата и время: '
#Действительная команда
date
echo 'Текущий рабочий каталог: '
#Неверная команда
cwd
echo 'имя пользователя: '
#Действительная команда
whoami
echo 'Список файлов и папок: '
#Неверный список
list

 

Вывод:

Следующий вывод появляется после выполнения предыдущего скрипта. Сценарий останавливает выполнение после выполнения недопустимой команды «cwd»:

andreyex@andreyex:-/Desktop/bash$ bash error3.bash

Current date and time: Tue Dec 27 19:19:38 +06 2022
Current orking Directory:
error3.bash: line 9: cwd: command not found 

andreyex@andreyex:-/Desktop/bash$

 

Пример 4: остановить выполнение для неинициализированной переменной

Создайте файл Bash со следующим сценарием, который показывает метод остановки выполнения сценария для неинициализированной переменной. Значения имени пользователя и пароля берутся из значений аргументов командной строки. Если какое-либо из значений этих переменных не инициализировано, выводится сообщение об ошибке. Если обе переменные инициализированы, сценарий проверяет, являются ли имя пользователя и пароль действительными или недействительными.

#!/bin/bash
#Установите параметр завершения сценария для неинициализированной переменной
set -u
#Установите значение первого аргумента командной строки на имя пользователя
username=$1
#Проверьте правильность или недопустимость имени пользователя и пароля
password=$2
#Проверьте правильность или недопустимость имени пользователя и пароля
if [[ $username == 'admin' && $password == 'hidenseek' ]]; then
    echo "Действительный пользователь."
else
    echo "Неверный пользователь."
fi

 

Читать  7 полезных примеров командной строки SFTP

Вывод:

Следующий вывод появляется, если сценарий выполняется без использования какого-либо значения аргумента командной строки. Скрипт останавливает выполнение после получения первой неинициализированной переменной:

andreyex@andreyex:~/Desktop/bash$ bash error4.bash 

error4.bash: line 7: $1: unbound variable 

andreyex@andreyex:~/Desktop/bash$

 

Следующий вывод появляется, если сценарий выполняется с одним значением аргумента командной строки. Скрипт останавливает выполнение после получения второй неинициализированной переменной:

andreyex@andreyex:-/Desktop/bash$ bash error4.bash admin 

error4.bash: line 9: $2: unbound variable 

andreyex@andreyex:-/Desktop/bash$

 

Следующий вывод появляется, если сценарий выполняется с двумя значениями аргумента командной строки — «admin» и «hide». Здесь имя пользователя действительно, но пароль недействителен. Итак, выводится сообщение «Invalid user»:

andreyex@andreyex:-/Desktop/bash$ bash error4.bash admin hide 

Invalid user. 

andreyex@andreyex:-/Desktop/bash$

 

Следующий вывод появляется, если сценарий выполняется с двумя значениями аргументов командной строки — «admin» и «hidenseek». Здесь имя пользователя и пароль действительны. Итак, выводится сообщение «Valid user»:

andreyex@andreyex:-/Desktop/bash$ bash error4.bash admin hidenseek 

Valid user. 

andreyex@andreyex:~/Desktop/bash$

 

Заключение

Различные способы обработки ошибок в скрипте Bash показаны в этой статье на нескольких примерах. Мы надеемся, что это поможет пользователям Bash реализовать функцию обработки ошибок в своих сценариях Bash.

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

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


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

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

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


Рекомендуемое
Philips выпустила новейшую модель из своей серии Evnia с изогнутой…

Спасибо!

Теперь редакторы в курсе.