Score:0

เชลล์สคริปต์ไม่ออกจากเมนูย่อย ช่วยด้วย!

ธง ca

ฉันมีปัญหากับเชลล์สคริปต์ที่ฉันกำลังเขียนอยู่ว่ามันทำทุกอย่างที่มันควรจะทำ ยกเว้นว่ามันจะไม่ออกจากเมนูย่อยและจะไม่ออกจากสคริปต์โดยสิ้นเชิงเมื่ออยู่ในเมนูย่อย

นี่คือสิ่งที่ฉันทำไปแล้ว ฉันได้แก้ไขบางส่วนของมันเนื่องจากความลับในการทำงาน:

#!/bin/bash



#ตอนนี้สำหรับเมนูหลัก...

ในขณะที่ :
ทำ

    แจ่มใส
    แมว<<EOF
    ======================================
    กล่องเครื่องมือ DCO 0.5a
    ======================================
    ถ้ามันยังไม่พังก็ซ่อมมันจนได้
    --------------------------------------
    ยินดีต้อนรับ!

    โปรดเลือกไซต์ที่คุณอยู่ใน:

    เว็บไซต์ใหม่หรือที่มีอยู่ A (1) 
    ไซต์ B ใหม่หรือที่มีอยู่ (2)
    --------------------------------------

อฟ
( อ่าน -n1 -s
     กรณี "$REPLY" ใน
    "1") echo "ไปที่เมนูนั้นทันที"
    นอน1
    ในขณะที่ :
ทำ
    แจ่มใส
    แมว<<EOF
    ======================================
    กล่องเครื่องมือ DCO 0.5a
    =======================================
    เว็บไซต์เมนู
    ---------------------------------------
    โปรดเลือก:

    เปลี่ยน DA (1)
    เปลี่ยนเว็บไซต์ (2)
    เปลี่ยนหมายเลขแร็ค (3)
    ทดสอบการเชื่อมต่อพอร์ต DA (4)
    ทดสอบระดับไฟพอร์ต DA (5)
    ตรวจสอบลำดับพอร์ต DS (6)
    ตรวจสอบเพื่อนบ้าน DS LLDP (7)
                                (ล้มเลิก
    ---------------------------------------

อฟ
( อ่าน -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 สถานะ"
    อ่าน -rsp $'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ...\n' -n1 ปุ่ม
    ;;
    "5") echo "กำลังทดสอบระดับแสงพอร์ต DA..."
    sshpass -p $password ssh $username@$da.$site "ตัวรับส่งสัญญาณ sh int et21/1-24/4"
    อ่าน -rsp $'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ...\n' -n1 ปุ่ม
    ;;
    "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" 
    อ่าน -rsp $'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ...\n' -n1 ปุ่ม
    ;;
    "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" 
    อ่าน -rsp $'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ...\n' -n1 ปุ่ม

    ;;
    "Q") พัก 2 ;;
    "q") echo -e $blinkred"ข้อผิดพลาด: "$red"โอ้โฮ! $ไม่มี ;;
    * ) echo "ขออภัย ตัวเลือกไม่ถูกต้อง!" ;;
    เอสแซค

    นอน 1 ) | ที$today.log
เสร็จแล้ว
หยุดพัก
    ;;
    "2") echo "ไปที่เมนูนั้นเดี๋ยวนี้"
    นอน1
    ในขณะที่ :
ทำ
    แจ่มใส
    แมว<<EOF
    ======================================
    กล่องเครื่องมือ DCO 0.5a
    =======================================
    ไซต์ B เมนู
    ---------------------------------------
    โปรดเลือก:

    เปลี่ยนอุปกรณ์ (1)
    เปลี่ยนเว็บไซต์ (2)
    เปลี่ยนหมายเลขแร็ค (3)
    ทดสอบการเชื่อมต่อพอร์ต (4)
    ทดสอบระดับแสงพอร์ต (5)
    ตรวจสอบลำดับพอร์ต (6)
    ตรวจสอบเพื่อนบ้าน LLDP (7)
                                    (ล้มเลิก
    ---------------------------------------

อฟ
( อ่าน -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 สถานะ"
    อ่าน -rsp $'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ...\n' -n1 ปุ่ม
    ;;
    "5") echo "กำลังทดสอบระดับแสงพอร์ต DA..."
    sshpass -p $password ssh $username@$da.$site "ตัวรับส่งสัญญาณ sh int et21/1-24/4"
    อ่าน -rsp $'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ...\n' -n1 ปุ่ม
    ;;
    "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" 
    อ่าน -rsp $'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ...\n' -n1 ปุ่ม
    ;;
    "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" 
    อ่าน -rsp $'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ...\n' -n1 ปุ่ม

    ;;
    "Q") พัก 2 ;;
    "q") echo -e $blinkred"ข้อผิดพลาด: "$red"โอ้โฮ! $ไม่มี ;;
    * ) echo "ขออภัย ตัวเลือกไม่ถูกต้อง!" ;;
    เอสแซค

    นอน 1 ) | ที$today.log
เสร็จแล้ว
หยุดพัก
    ;;
เอสแซค
)
เสร็จแล้ว

ฉันมีหนึ่งเมนูหลักและสองเมนูย่อย:

เมนูหลัก
 |
 |_____ ไซต์ A เมนูย่อย
 |
 |_____ เมนูย่อยของไซต์ B

ด้วยตัวเลือก (Q) เพื่อออกจากการกลับไปที่เมนูหลัก แต่ฉันไม่สามารถออกจากการกลับไปที่เมนูหลักได้ ฉันพยายามแล้ว:

พัก 2 ;;

และ:

กลับ ;;

แต่ทั้งสองดูเหมือนจะไม่ทำงานเลย สคริปต์จะวนกลับภายในเชลล์ย่อยเดียวกัน

ความช่วยเหลือใด ๆ ที่จะได้รับการขอบคุณมาก ขอบคุณ!

FedKad avatar
cn flag
ทำไมคุณถึงใช้ sub-shells?
ca flag
เพราะรู้สึกว่าเป็นทางไป คุณจะทำอะไรแทน @FedKad
bac0n avatar
cn flag
เอาออก....
FedKad avatar
cn flag
คุณสามารถเริ่มต้นด้วยการลบเชลล์ย่อย อย่างไรก็ตาม สคริปต์ของคุณมีข้อผิดพลาดทางไวยากรณ์และตรรกะมากมาย จะเป็นการเริ่มต้นที่ดี เช็คได้ที่ https://www.shellcheck.net/ . และโปรดทราบว่านี่เป็นไซต์ถามตอบ และคุณอาจไม่ได้รับความช่วยเหลือในการแก้ไขข้อบกพร่องของสคริปต์

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา