Рейтинг:0

Сценарий оболочки не выходит из подменю, помогите!

флаг ca

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

Вот что я сделал до сих пор. Я отредактировал часть из соображений конфиденциальности:

#!/бин/баш



#Теперь главное меню...

пока :
делать

    чистый
    кошка<<EOF
    =======================================
    Инструментарий DCO 0.5a
    =======================================
    Если он не сломался, почините его, пока он не
    --------------------------------------
    Добро пожаловать!

    Пожалуйста, выберите, на каком сайте вы находитесь:

    Новый или существующий сайт A (1) 
    Новый или существующий сайт B (2)
    --------------------------------------

EOF
(читать -n1 -s
     случай "$REPLY" в
    "1") echo "Сейчас переходим в это меню"
    спать 1
    пока :
делать
    чистый
    кошка<<EOF
    =======================================
    Инструментарий DCO 0.5a
    ========================================
    САЙТ А МЕНЮ
    ---------------------------------------
    Пожалуйста, сделайте выбор:

    Изменить DA (1)
    Изменить сайт (2)
    Изменить номер стойки (3)
    Проверка подключения порта DA (4)
    Проверка уровня освещенности порта DA (5)
    Проверить порядок портов DS (6)
    Проверка соседей DS LLDP (7)
                                (Уволиться
    ---------------------------------------

EOF
(читать -n1 -s
случай "$REPLY" в
    "1") echo "Давайте изменим этот DA/DS, введите новый: "
    читать да 
    echo "Установите это сейчас.."
    ;;
    "2") echo "Давайте изменим название сайта, введите новое: "
    читать сайт 
    echo "Установите это сейчас.."
    ;;
    "3") echo "Давайте изменим целевую стойку, введите новую: "
    стойка для чтения 
    echo "Установите это сейчас.."
    ;;
    "4") echo "Проверка подключения к порту DA..."
    sshpass -p $password ssh $username@$da.$site "sh int et21/1-24/4 статус"
    read -rsp $'Нажмите любую клавишу, чтобы продолжить...\n' -n1 key
    ;;
    "5") echo "Проверка уровней освещенности порта DA..."
    sshpass -p $password ssh $username@$da.$site "приемопередатчик sh int et21/1-24/4"
    read -rsp $'Нажмите любую клавишу, чтобы продолжить...\n' -n1 key
    ;;
    "6") 
    sshpass -p $password ssh $username@ds01.$site "sh int desc | inc $rack"
    sshpass -p $password ssh $username@ds02.$site "sh int desc | inc $rack" 
    sshpass -p $password ssh $username@ds03.$site "sh int desc | inc $rack" 
    sshpass -p $password ssh $username@ds04.$site "sh int desc | inc $rack" 
    read -rsp $'Нажмите любую клавишу, чтобы продолжить...\n' -n1 key
    ;;
    "7") echo "Проверка соседей DS LLDP..."
    sshpass -p $password ssh $username@ds01.$site "sh lldp neigh | inc $rack" 
    sshpass -p $password ssh $username@ds02.$site "sh lldp neigh | inc $rack" 
    sshpass -p $password ssh $username@ds03.$site "sh lldp neigh | inc $rack" 
    sshpass -p $password ssh $username@ds04.$site "sh lldp neigh | inc $rack" 
    read -rsp $'Нажмите любую клавишу, чтобы продолжить...\n' -n1 key

    ;;
    "Q") перерыв 2 ;;
    "q") echo -e $blinkred"ОШИБКА: "$red"Вау! С учетом регистра, приятель!" $ нет ;;
    * ) echo "Извините, неверный вариант!" ;;
    эсак

    спать 1 ) | тройник $today.log
сделано
сломать
    ;;
    "2") echo "Сейчас переходим в это меню"
    спать 1
    пока :
делать
    чистый
    кошка<<EOF
    =======================================
    Инструментарий DCO 0.5a
    ========================================
    МЕНЮ САЙТА Б
    ---------------------------------------
    Пожалуйста, сделайте выбор:

    Сменить устройство (1)
    Изменить сайт (2)
    Изменить номер стойки (3)
    Возможность подключения тестового порта (4)
    Уровни освещенности тестового порта (5)
    Проверить порядок портов (6)
    Проверить соседей LLDP (7)
                                    (Уволиться
    ---------------------------------------

EOF
(читать -n1 -s
    случай "$REPLY" в
    "1") echo "Давайте изменим этот DA/DS, введите новый: "
    читать да 
    echo "Установите это сейчас.."
    ;;
    "2") echo "Давайте изменим название сайта, введите новое: "
    читать сайт 
    echo "Установите это сейчас.."
    ;;
    "3") echo "Давайте изменим целевую стойку, введите новую: "
    стойка для чтения 
    echo "Установите это сейчас.."
    ;;
    "4") echo "Проверка подключения к порту DA..."
    sshpass -p $password ssh $username@$da.$site "sh int et21/1-24/4 статус"
    read -rsp $'Нажмите любую клавишу, чтобы продолжить...\n' -n1 key
    ;;
    "5") echo "Проверка уровней освещенности порта DA..."
    sshpass -p $password ssh $username@$da.$site "приемопередатчик sh int et21/1-24/4"
    read -rsp $'Нажмите любую клавишу, чтобы продолжить...\n' -n1 key
    ;;
    "6") 
    sshpass -p $password ssh $username@ds01.$site "sh int desc | inc $rack"
    sshpass -p $password ssh $username@ds02.$site "sh int desc | inc $rack" 
    sshpass -p $password ssh $username@ds03.$site "sh int desc | inc $rack" 
    sshpass -p $password ssh $username@ds04.$site "sh int desc | inc $rack" 
    read -rsp $'Нажмите любую клавишу, чтобы продолжить...\n' -n1 key
    ;;
    "7") echo "Проверка соседей DS LLDP..."
    sshpass -p $password ssh $username@ds01.$site "sh lldp neigh | inc $rack" 
    sshpass -p $password ssh $username@ds02.$site "sh lldp neigh | inc $rack" 
    sshpass -p $password ssh $username@ds03.$site "sh lldp neigh | inc $rack" 
    sshpass -p $password ssh $username@ds04.$site "sh lldp neigh | inc $rack" 
    read -rsp $'Нажмите любую клавишу, чтобы продолжить...\n' -n1 key

    ;;
    "Q") перерыв 2 ;;
    "q") echo -e $blinkred"ОШИБКА: "$red"Вау! С учетом регистра, приятель!" $ нет ;;
    * ) echo "Извините, неверный вариант!" ;;
    эсак

    спать 1 ) | тройник $today.log
сделано
сломать
    ;;
эсак
)
сделано

У меня есть одно главное меню и два подменю:

Главное меню
 |
 |_____ Подменю сайта A
 |
 |_____ Подменю сайта B

С опцией (Q) вернуться в главное меню, но я не могу вернуться в главное меню. Я пытался:

перерыв 2 ;;

И:

возвращаться ;;

Но оба, похоже, вообще не работают. Сценарий просто зацикливается в той же подоболочке.

Любая помощь будет принята с благодарностью. Спасибо!

FedKad avatar
флаг cn
Почему вы используете суб-оболочки?
флаг ca
Потому что я чувствовал, что это правильный путь. Что бы вы сделали вместо этого? @ФедКад
bac0n avatar
флаг cn
удалить их....
FedKad avatar
флаг cn
Вы можете начать с удаления подоболочек. Однако в вашем сценарии много синтаксических и логических ошибок. Это будет хорошим началом, чтобы проверить это на https://www.shellcheck.net/. И обратите внимание, что это сайт вопросов и ответов, и вы можете не получить помощь в отладке скриптов.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.