bash menu - help

bash menu - help

Hi Guys,

I'm using the following menu format:
PS3='Select your choise or press the Enter to go back to menu:' options=("list" "Joined" "Opened" "Number" "Quit")
select opt in "${options[@]}"
do case $opt in "List") cat file.txt ;; "Joined") run script ;; "Opened") run other script ;; "Number") one more script ;; "Quit") exit ;; *) echo "invalid option";; esac done
When the user selsct one of the option a script is runing, all is good.

but when the script ends I get this line:
"Select your choise or press the Enter to go back to menu:"

What I would like to do is that after the script rans to go back to menu.where I would like to see all menu option again.

Thanks!
Air
 
אתב יכול קצת לפרט יותר.

רק לאשר שהבנתי נכון, אתה מתכוון שבכל סקריפט שאליו אני פונה מהתפריט הראשי להכניס פונקציה ש'תקרא' לתפריט הראשי להופיע שוב לאחר שהסקריפט סיים?
לצערי אני לא יודע איך להשתמש בפונקציות...אבל אבדוק ברשת איך עושים זאת.

תודה רבה.
 

Expect

New member
אוקי

קח את כל הבלוק קוד של התפריט שלך ותשים אותו בפונקציה
נגיד
main_menu() {bla bla
bla bla
} ואז בכל אפשרות "תת-תפריט" שתרצה שבסופה זה יחזור לתפריט הראשי, תכניס את המילה main_menu
 
אנסה - תודה רבה !


 

Testosterone

New member
אני חושב שהוא מדבר על משהו אחר,

מה שהוא מדבר, זו "בעיה" (יותר כמו התנהגות) אינהרנטית של הפקודה 'select'.
מה שלא ניסיתי, בכל התפרטים של הכלים שבניתי, כשהאופציה שבחרת דרך select הושלמה, אתה נשאר אוטומטית עם PS3, מבלי לראות את שאר האופציות.
&nbsp
רק כשאתה לוחץ שוב על ENTER אתה מקבל שוב את האופציות שקיימות לך בתפריט.
&nbsp
&nbsp
 

Expect

New member
מכיר את הבעיה.

ובמקרה של לשים את זה בתוך פונקציה זה עוקף את הבעיה הזו כי זה תמיד יפעיל אותה מחדש בכל מקרה. ככה אני עשיתי. וכשאני רוצה מתת-תפריט לחזור לתפריט אני עושה פשוט break 1
 
ניסיתי את הפונקציה אבל כנראה שאני טועה במשהו.

הנה מה שעשיתי .

זהו התפריט הראשי שלי, כל אופציה עושה פעולה, הפעלה של סקריפט אחר או מדפיסה למסך.
כמו שייעצת לי הכנסתי את כל התפריט לפונקציה main_manu
המשך מתחת לחלון הקוד...
main_menu() { #!/bin/bash
PS3='Select your choise or press the Enter to go back to menu:' options=("function1" "function2" "function3" "function4" "function5" "function6" "Quit") select opt in "${options[@]}" do case $opt in "function1") cat file.txt ;; "function2") Script_1 ;; "function3") Script_2 ;; "function4") Script_3 ;; "function5") Script_4 ;; "function") echo some text ;; "Quit") exit ;; *) echo "invalid option";; esac done }

לדוגמא, הנה אחד הסקריפטים שמופעל שבוחרים מהתפריט הראשי את אופציה מספר "1".
#!/bin/bash
echo "some text"
read userInputgrep $userInput /home* > results.txtcat results.txtmain_menu ### <<<< this is what you meant for?
תודה !
 

aviMalool

New member
חסרים break, ואז דרושה גם לולאה

$ cat infiniteMenuPS3='Select your choise or press the Enter to go back to menu: '
options=("List" "Joined" "Opened" "Number" "Quit")
until false; do select opt in "${options[@]}"; do case $opt in "List") printf "$opt\n"; break; ;; "Joined") printf "$opt\n"; break; ;; "Opened") printf "$opt\n"; break; ;; "Number") printf "$opt\n"; break; ;; "Quit") exit; ;; *) echo "invalid option"; break; ;; esac donedone$ ./infiniteMenu1) List2) Joined3) Opened4) Number5) QuitSelect your choise or press the Enter to go back to menu: 2Joined1) List2) Joined3) Opened4) Number5) QuitSelect your choise or press the Enter to go back to menu: 5$
 

aviMalool

New member
ואפשר לכתוב את ה break פעם אחת, בין ה esac ל done

אין צורך לכתוב break כמו שכתוב. אפשר רק פעם אחת. בין השורה של ה esac לשורה של ה done:
esac break
done
 
למעלה