Bash脚本:循环执行后始终显示菜单

Eig*_*all 5 unix linux bash loops menu

我正在使用这样的bash脚本菜单:

#!/bin/bash
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 3")
            echo "you chose choice 3"
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

每个菜单选择后,我都会收到提示

Please enter your choice:
Run Code Online (Sandbox Code Playgroud)

如何在每个选项完成执行后始终显示菜单?我已经做了一些环顾四周,我想我可以做一些while循环,但我没有能够得到任何工作.

tho*_*hom 16

使它美观和用户友好;-)

#!/bin/bash

while :
do
    clear
    cat<<EOF
    ==============================
    Menusystem experiment
    ------------------------------
    Please enter your choice:

    Option (1)
    Option (2)
    Option (3)
           (Q)uit
    ------------------------------
EOF
    read -n1 -s
    case "$REPLY" in
    "1")  echo "you chose choice 1" ;;
    "2")  echo "you chose choice 2" ;;
    "3")  echo "you chose choice 3" ;;
    "Q")  exit                      ;;
    "q")  echo "case sensitive!!"   ;; 
     * )  echo "invalid option"     ;;
    esac
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

使用函数调用或对其他脚本的调用替换此示例中的回声.


Ran*_*r T 5

只是如下修改了您的脚本。它为我工作!

 #!/bin/bash
 while true
 do
 PS3='Please enter your choice: '
 options=("Option 1" "Option 2" "Option 3" "Quit")
 select opt in "${options[@]}" 
 do
     case $opt in
         "Option 1")
             echo "you chose choice 1"
             break
             ;;
         "Option 2")
             echo "you chose choice 2"
             break
             ;;
         "Option 3")
             echo "you chose choice 3"
             break
             ;;
         "Quit")
             echo "Thank You..."                 
             exit
             ;;
         *) echo invalid option;;
     esac
 done
 done
Run Code Online (Sandbox Code Playgroud)