【问题标题】:Bash script: always show menu after loop executionBash脚本:循环执行后总是显示菜单
【发布时间】:2013-12-12 01:20:04
【问题描述】:

我正在使用这样的 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

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

Please enter your choice:

如何在每个选项完成执行后始终显示菜单?我做了一些环顾四周,我想我可以做一些 while 循环,但我无法让任何工作。

【问题讨论】:

  • 显示您的尝试,以便我们帮助您解决问题。

标签: linux bash unix loops menu


【解决方案1】:

刚刚修改了您的脚本,如下所示。它为我工作!

 #!/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

【讨论】:

    【解决方案2】:

    让它美观且用户友好;-)

    #!/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
    

    将此示例中的回显替换为函数调用或对其他脚本的调用。

    【讨论】:

      【解决方案3】:

      你也可以这样做:

      #!/bin/bash
      
      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"
                  ;;
              "Option 2")
                  echo "you chose choice 2"
                  ;;
              "Option 3")
                  echo "you chose choice 3"
                  ;;
              "Quit")
                  break
                  ;;
              *) echo invalid option;;
          esac
          counter=1
          SAVEIFS=$IFS
          IFS=$(echo -en "\n\b")   # we set another delimiter, see also: https://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html
          for i in ${options[@]};
          do
              echo $counter')' $i
              let 'counter+=1'
          done
          IFS=$SAVEIFS
      done
      

      【讨论】:

        猜你喜欢
        • 2017-12-04
        • 1970-01-01
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 2012-09-30
        • 2013-07-22
        相关资源
        最近更新 更多