Bash script: always show menu after loop execution Bash script: always show menu after loop execution unix unix

Bash script: always show menu after loop execution


Make it beautiful and userfriendly ;-)

#!/bin/bashwhile :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 1done

Replace the echos in this example with function calls or calls to other scripts.


just modified your script like below. its working for me !

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


You can also do something like:

#!/bin/bashPS3='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=$SAVEIFSdone