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

Есть ли оператор «goto» в Bash

Bash Heredoc

Одной из наиболее важных особенностей Bash является его способность управлять потоком выполнения скрипта, этот контроль возможен с помощью различных условных операторов, таких как if-else, и циклов, таких как for и while. Однако некоторые разработчики могут задаться вопросом, поддерживает ли Bash оператор goto. В этой статье будет рассмотрено, есть ли в Bash оператор goto или нет.

 

Есть ли оператор «goto» в Bash

Оператор «goto» — это программная конструкция, которая позволяет программистам переходить к определенной части кода. Это считается спорной функцией из-за того, что она может затруднить чтение и понимание кода. Однако в некоторых случаях это может быть полезно, особенно при работе со сложными потоками управления.

В Bash нет прямой поддержки оператора «goto», вместо этого Bash предоставляет альтернативные конструкции, которые могут достичь того же эффекта, что и оператор «goto».

Например, операторы «break» и «continue» позволяют программистам выходить из циклов или пропускать итерации в цикле. Точно так же Bash предоставляет оператор return для выхода из функции и возврата к вызывающему коду.

#!/bin/bash

# определить функцию для сложения двух чисел

function add_numbers {

if [ $# -ne 2 ]; then

echo "Ошибка: дайте два числа для сложения"

return 1 # выйти из функции со статусом ошибки

fi

result =$ ( ( $1 + $2 ) )

echo $result

}

result=$(add_numbers 10 20)

if [ $? -eq 0 ]; then

echo "Результат: $result"

else

echo "Сбой функции с кодом ошибки $?"

fi

 

Код объявляет функцию с именем add_numbers, которая принимает два аргумента, проверяет, предоставлено ли ровно два аргумента, складывает два числа и сохраняет результат в переменной результата.

Затем сценарий вызывает функцию add_numbers с двумя аргументами и проверяет статус возврата функции с помощью переменной ‘$?’. Если функция завершается успешно (состояние возврата 0), то она печатает результат, в противном случае она печатает сообщение об ошибке со статусом возврата функции:

andreyex@destroyer: $ bash bashfile.sh

Результат: 30

andreyex@destroyer:-$

 

Другой альтернативой оператору «goto» в Bash является оператор case, поскольку оператор case похож на оператор switch в других языках программирования и позволяет программистам выполнять определенные блоки кода на основе значения переменной. Оператор case можно использовать для достижения того же эффекта, что и оператор goto. Ниже приведен код, который просто складывает два целых числа, используя ту же логику, что и оператор goto :

#!/bin/bash

# прочитать два числа от пользователя

read -p "Введите первое число: " num1

read -p "Введите второе число: " num2

function add_numbers {

result=$(( $1 + $2 ))

# выведите результат пользователю

echo "Результат: $result "

}

case $num1 $num2 in

* [ ! 0 - 9 ] * )

echo "Ошибка: введите допустимые целые числа"

;;

*)

add_numbers $num1 $num2

;;

esac

 

Сначала используется команда read, чтобы предложить пользователю ввести два числа, а затем функция add_numbers добавляет два числа и выводит результат пользователю. Чтобы проверить, являются ли оба числа допустимыми целыми числами, в коде используется оператор case. Если какое-либо число не является допустимым целым числом, сценарий выводит сообщение об ошибке, а если оба числа являются допустимыми целыми числами, вызывается функция add_numbers для сложения чисел и вывода результата.

Используя оператор case для проверки ввода, сценарий избегает необходимости в операторе «goto» для перехода к определенной части кода на основе входного значения:

andreyex@destroyer:-$ bash bashfile.sh

Введите первое число: 15

Введите второе число: 15

Результат: 30

andreyex@destroyer:-$

 

Заключение

Bash не обеспечивает прямой поддержки оператора «goto», однако Bash предоставляет альтернативные конструкции, такие как операторы break, continue, return и case, которые могут достигать тех же эффектов, что и оператор «goto». Как и в любом языке программирования, важно использовать эти конструкции разумно и избегать их чрезмерного использования. Правильное использование конструкций потока управления может сделать код более удобным для чтения и сопровождения, в то время как чрезмерное использование может затруднить понимание и отладку кода.

Exit mobile version