変数が指定された数値より小さいか、テキスト「QUIT」などの数値であることを確認します。

変数が指定された数値より小さいか、テキスト「QUIT」などの数値であることを確認します。

$ CHOICEが "QUIT"でないか、指定された整数(変数)より小さい数字でない限り、このループを維持します。

私はこれを使用しています:(例えば22を使用)

NUMBER=22
CHOICE=99
while [ "$CHOICE" -gt "$NUMBER" ] && [ "$CHOICE" != "QUIT" ]; do
  read CHOICE < /dev/tty
done

ただし、「test」と入力すると、最初のテストで整数が予想されるため、スクリプトがクラッシュします。

この衝突を防ぐにはどうすればよいですか?

ベストアンサー1

CHOICE が「QUIT」でない場合、または NUMBER より小さい整数の場合、次のコードが繰り返されます。

NUMBER=22
while :; do
    read CHOICE
    case $CHOICE in
        QUIT) break;;
        *[!0-9]*|'') ;;
        *) test "$CHOICE" -lt "$NUMBER" && break;;
    esac
done

ユーザーが^ Dを入力したときにループを終了するには、readループ条件を次のように設定する必要がありますwhile read CHOICE; do case $CHOICE ...

おすすめ記事