Shell 脚本有条件循环

Asi*_*sif 2 shell shell-script

我只是创建了一个新的 shell 脚本,但遇到了一些小问题。以下是我的脚本:-

function mainMenu(){
    while :
    do
    echo -e "\nMain Menu:"
    echo " A. Process Managements Utilities"
    echo " B. Memory Managements Utilities"
    echo " C. Exit"

    read -p "Select :" menuSelect
    echo

    case $menuSelect in

            a|A) processMgmt;;
            b|B) memoryMgmt;;
            c|C) exit 0;;

            *)echo "Invalid Input"
              echo
              ;;
    esac
    done
}
Run Code Online (Sandbox Code Playgroud)

当用户输入“无效输入”时,该函数将打印所有mainMenu()输出:-

Main Menu:
 A. Process Managements Utilities
 B. Memory Managements Utilities
 C. Exit

Select :e
Invalid Input

Main Menu:
 A. Process Managements Utilities
 B. Memory Managements Utilities
 C. Exit

 Select :
Run Code Online (Sandbox Code Playgroud)

select:当用户输入无效时如何打印?

Select:e
Invalid input
Select:s
Invalid input
Run Code Online (Sandbox Code Playgroud)

Pan*_*dya 5

由于您只想第一次打印有关选项 A、B 等的信息,请在打印后开始while循环

function mainMenu(){

    echo -e "\nMain Menu:"
    echo " A. Process Managements Utilities"
    echo " B. Memory Managements Utilities"
    echo " C. Exit"

while :
    do

    read -p "Select :" menuSelect
    echo

    case $menuSelect in

            a|A) processMgmt;;
            b|B) memoryMgmt;;
            c|C) exit 0;;

            *)echo "Invalid Input"
              echo
              ;;
    esac
    done
}
Run Code Online (Sandbox Code Playgroud)

示例输出(这是问题所期望的):

Main Menu:
 A. Process Managements Utilities
 B. Memory Managements Utilities
 C. Exit
Select :q

Invalid Input

Select :q

Invalid Input
Run Code Online (Sandbox Code Playgroud)

通过这种方式,在调用函数时会打印一次有关选择选择的信息,mainMenu然后while循环read输入并case执行您想要的工作。如果输入无效,则while再次循环询问 by read -p "Select"