(Закрыто) Скрипт bash

PashaGold

New member
Сообщения
33
#1
Нужна помощь в написании скрипта. Есть меню выбора действия, вызывающий разные функции, после которых происходит выход. Как его переделать, чтобы можно было вернуться на это меню? Можно по умолчанию, можно таким же выбором действия. Просто не знаю, как сделать возврат. Вот пример:

function function1() {
echo "Первая функция"
exit 1

function function2() {
echo "Вторая функция"
exit 1

PS3="Выбор действия. Введите нужную цифру и нажмите Enter: "
select opt in "Первый" "Второй" "Выход"
do
if [ "$opt" == "Первый" ]; then
fuction1
break
elif [ "$opt" == "Второй" ]; then
fuction2
break
elif [ "$opt" == "Выход" ]; then
break
fi
done
 

PashaGold

New member
Сообщения
33
#3
Как то не могу понять, как это правильно реализовать. В while какое условие нужно поставить, чтобы получался возврат?
У меня была вообще идея, что главный блок как то обозвать, и делать ссылку на него в конце функции. Но я не знаю как

Суть в том, что функции не друг за другом идут, а только те, которые я сам выберу. Их может быть всего 10, а нужно только 3 разных. Это для примера
 

Montfer

New member
Сообщения
1 589
#4
Как то не могу понять, как это правильно реализовать. В while какое условие нужно поставить, чтобы получался возврат?
У меня была вообще идея, что главный блок как то обозвать, и делать ссылку на него в конце функции. Но я не знаю как

Суть в том, что функции не друг за другом идут, а только те, которые я сам выберу. Их может быть всего 10, а нужно только 3 разных. Это для примера
это уже хз как, не дружу с циклами, а тем более в баше
 

oko

New member
Сообщения
965
#5
to PashaGold
imho, без каких-либо циклов для классического меню проще через select...
Если правильно понял задумку, то будет бесконечный запрос выбора нужного пункта меню. Последним пунктом добавляем Exit, который завершает скрипт в целом...
 

PashaGold

New member
Сообщения
33
#6
to PashaGold
imho, без каких-либо циклов для классического меню проще через select...
Если правильно понял задумку, то будет бесконечный запрос выбора нужного пункта меню. Последним пунктом добавляем Exit, который завершает скрипт в целом...
я правильно понял, что проще в каждую функцию добавить выбор? просто хотел избежать этого, слишком громоздко получается. Думал, что можно реализовать типа кнопки "Назад"
 

PashaGold

New member
Сообщения
33
#8
Если break'и убрать, он и будет возвращаться к меню. Либо я не понял, что вам нужно.
Да, так оно возвращается, но уже полное меню не отображается. Выходит только строка:

Код:
PS3="Выбор действия. Введите нужную цифру и нажмите Enter: "
А должно снова появляться полное меню с отображением функций

Допустим, в программировании пишется программа так: есть модуль Main, который вызывается функции, и можно дописать в конец функции повторное обращение к Main. Вот хочу подобное тут реализовать
 

PashaGold

New member
Сообщения
33
#9
Нашел решение. Переписал выбор PS3 в функцию и просто вызываю её в конце остальных. Всем спасибо, что помогли додуматься :)
 

oko

New member
Сообщения
965
#10
to PashaGold
#!/bin/bash
function func1() {
echo "This is the FirstFunction..."
}

function func2() {
echo "This is the SecondFunction..."
}

PS3="Select the function: "
select opt in first_func second_func quit; do
case $opt in
first_func)
func1
;;
second_func)
func2
;;
quit)
break
;;
*)
echo "Invalid option $REPLY, please, select the function";;
esac
done
exit 0
 

Вложения

PashaGold

New member
Сообщения
33
#11
to PashaGold
#!/bin/bash
function func1() {
echo "This is the FirstFunction..."
}

function func2() {
echo "This is the SecondFunction..."
}

PS3="Select the function: "
select opt in first_func second_func quit; do
case $opt in
first_func)
func1
;;
second_func)
func2
;;
quit)
break
;;
*)
echo "Invalid option $REPLY, please, select the function";;
esac
done
exit 0
Да, изначально хотел так, но потом, когда начал описывать полностью, что хочу, то понял какой именно вывод нужно сделать. Спасибо)