Puncte:0

Scriptul Shell nu iese din submeniu, ajutor!

drapel ca

Am o problemă cu un script shell pe care îl scriu, în care face tot ce trebuie să facă, cu excepția faptului că nu va ieși din submeniuri și nici nu va ieși complet din script când se află într-un submeniu.

Iată ce am făcut până acum. Am redactat părți din ea din cauza confidențialității muncii:

#!/bin/bash



#Acum pentru meniul principal...

in timp ce :
do

    clar
    pisica<<EOF
    =======================================
    DCO Toolbox 0.5a
    =======================================
    Dacă nu este stricat, reparați-l până când este
    --------------------------------------
    Bine ati venit!

    Vă rugăm să alegeți pe ce site vă aflați:

    Un site nou sau existent A (1) 
    Un site nou sau existent B (2)
    --------------------------------------

EOF
( citiți -n1 -s
     cazul „$REPLY” în
    „1”) echo „Merg la acel meniu acum”
    somn 1
    in timp ce :
do
    clar
    pisica<<EOF
    =======================================
    DCO Toolbox 0.5a
    ========================================
    SITE A MENIU
    ---------------------------------------
    Vă rugăm să alegeți:

    Schimbați DA (1)
    Schimbați site-ul (2)
    Schimbați numărul de rack (3)
    Testați conectivitatea portului DA (4)
    Testați nivelurile luminii portului DA (5)
    Verificați comanda portului DS (6)
    Verificați vecinii DS LLDP (7)
                                (Părăsi
    ---------------------------------------

EOF
( citiți -n1 -s
cazul „$REPLY” în
    „1”) echo „Să schimbăm acel DA/DS, introduceți unul nou: „
    citeste da 
    echo „Se setează asta acum..”
    ;;
    „2”) echo „Să schimbăm numele site-ului, introduceți unul nou: „
    site de citit 
    echo „Se setează asta acum..”
    ;;
    „3”) echo „Să schimbăm rack-ul țintă, introduceți unul nou: „
    citire rack 
    echo „Se setează asta acum..”
    ;;
    „4”) echo „Se testează conectivitatea portului DA...”
    sshpass -p $parolă ssh $nume utilizator@$da.$site „sh int et21/1-24/4 status”
    read -rsp $'Apăsați orice tastă pentru a continua...\n' Tasta -n1
    ;;
    „5”) echo „Se testează nivelurile luminii portului DA...”
    sshpass -p $parolă ssh $nume utilizator@$da.$site „sh int et21/1-24/4 transceiver”
    read -rsp $'Apăsați orice tastă pentru a continua...\n' Tasta -n1
    ;;
    „6”) 
    sshpass -p $parolă ssh $nume utilizator@ds01.$site „sh int desc | inc $rack”
    sshpass -p $parolă ssh $nume utilizator@ds02.$site „sh int desc | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds03.$site „sh int desc | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds04.$site „sh int desc | inc $rack” 
    read -rsp $'Apăsați orice tastă pentru a continua...\n' Tasta -n1
    ;;
    „7”) echo „Se verifică vecinii DS LLDP...”
    sshpass -p $parolă ssh $nume utilizator@ds01.$site „sh lldp neigh | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds02.$site „sh lldp neigh | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds03.$site „sh lldp neigh | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds04.$site „sh lldp neigh | inc $rack” 
    read -rsp $'Apăsați orice tastă pentru a continua...\n' Tasta -n1

    ;;
    „Q”) pauză 2;;
    "q") echo -e $blinkred"EROARE: "$roșu"Woa! Sensibil cu majuscule și minuscule, amice!" $niciuna ;;
    * ) echo "Ne pare rău, opțiune nevalidă!" ;;
    esac

    somn 1 ) | tee $today.log
Terminat
pauză
    ;;
    „2”) echo „Merg la acel meniu acum”
    somn 1
    in timp ce :
do
    clar
    pisica<<EOF
    =======================================
    DCO Toolbox 0.5a
    ========================================
    MENIU SITE B
    ---------------------------------------
    Vă rugăm să alegeți:

    Schimbați dispozitivul (1)
    Schimbați site-ul (2)
    Schimbați numărul de rack (3)
    Testează conectivitatea portului (4)
    Testare niveluri de lumină porturi (5)
    Verificați comanda portului (6)
    Verificați vecinii LLDP (7)
                                    (Părăsi
    ---------------------------------------

EOF
( citiți -n1 -s
    cazul „$REPLY” în
    „1”) echo „Să schimbăm acel DA/DS, introduceți unul nou: „
    citeste da 
    echo „Se setează asta acum..”
    ;;
    „2”) echo „Să schimbăm numele site-ului, introduceți unul nou: „
    site de citit 
    echo „Se setează asta acum..”
    ;;
    „3”) echo „Să schimbăm rack-ul țintă, introduceți unul nou: „
    citire rack 
    echo „Se setează asta acum..”
    ;;
    „4”) echo „Se testează conectivitatea portului DA...”
    sshpass -p $parolă ssh $nume utilizator@$da.$site „sh int et21/1-24/4 status”
    read -rsp $'Apăsați orice tastă pentru a continua...\n' Tasta -n1
    ;;
    „5”) echo „Se testează nivelurile luminii portului DA...”
    sshpass -p $parolă ssh $nume utilizator@$da.$site „sh int et21/1-24/4 transceiver”
    read -rsp $'Apăsați orice tastă pentru a continua...\n' Tasta -n1
    ;;
    „6”) 
    sshpass -p $parolă ssh $nume utilizator@ds01.$site „sh int desc | inc $rack”
    sshpass -p $parolă ssh $nume utilizator@ds02.$site „sh int desc | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds03.$site „sh int desc | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds04.$site „sh int desc | inc $rack” 
    read -rsp $'Apăsați orice tastă pentru a continua...\n' Tasta -n1
    ;;
    „7”) echo „Se verifică vecinii DS LLDP...”
    sshpass -p $parolă ssh $nume utilizator@ds01.$site „sh lldp neigh | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds02.$site „sh lldp neigh | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds03.$site „sh lldp neigh | inc $rack” 
    sshpass -p $parolă ssh $nume utilizator@ds04.$site „sh lldp neigh | inc $rack” 
    read -rsp $'Apăsați orice tastă pentru a continua...\n' Tasta -n1

    ;;
    „Q”) pauză 2;;
    "q") echo -e $blinkred"EROARE: "$roșu"Woa! Sensibil cu majuscule și minuscule, amice!" $niciuna ;;
    * ) echo "Ne pare rău, opțiune nevalidă!" ;;
    esac

    somn 1 ) | tee $today.log
Terminat
pauză
    ;;
esac
)
Terminat

Am un meniu principal și două submeniuri:

Meniu principal
 |
 |_____ Submeniul site-ului A
 |
 |_____ Submeniul site-ului B

Cu o opțiune (Q) pentru a ieși înapoi la meniul principal, dar nu pot să ies înapoi la meniul principal. Am încercat:

pauză 2;;

Și:

întoarcere ;;

Dar ambele par să nu funcționeze deloc. Scriptul face bucle înapoi în același sub-shell.

Orice ajutor ar fi primit cu mare recunoștință. Mulțumiri!

FedKad avatar
drapel cn
De ce folosești sub-shell?
drapel ca
Pentru că am simțit că aceasta este calea de urmat. Ce ai face în schimb? @FedKad
bac0n avatar
drapel cn
inlatura-le....
FedKad avatar
drapel cn
Puteți începe prin a elimina sub-cochilii. Cu toate acestea, scriptul dumneavoastră are multe erori de sintaxă și logică. Va fi un început bun să îl verificați la https://www.shellcheck.net/ . Și vă rugăm să rețineți că acesta este un site de întrebări și răspunsuri și este posibil să nu primiți ajutor în depanarea scripturilor.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.