シェルスクリプト条件付きループ

シェルスクリプト条件付きループ

私は新しいシェルスクリプトを作成しましたが、いくつかの問題が発生しました。以下は私のスクリプトです: -

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
}

ユーザーが「INVALID INPUT」と入力すると、関数はすべての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 :

select:ユーザー入力が無効な場合にのみ印刷するには?

Select:e
Invalid input
Select:s
Invalid input

ベストアンサー1

初めてオプション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
}

出力例(例:予想される質問から):

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

Invalid Input

Select :q

Invalid Input

これにより、関数が呼び出されたときに選択項目に関する情報が一度印刷され、次に入力を繰り返して目的のmainMenu操作whileを実行します。readcase入力が間違っている場合whileそしてループでもう一度尋ねてくださいread -p "Select"

おすすめ記事