while ステートメントの Bash または条件

while ステートメントの Bash または条件

ユーザー入力が「stringA」または「stringB」などであることを確認し、これらの文字列のいずれかと同じ場合は、ユーザー入力を印刷する必要があるスクリプトをbashに書きたいと思います。私のコードは次のとおりです

#!/bin/bash

echo "Please enter your choice (stringA or stringB): "
read result

while [[ (${result,,} != 'stringa') || (${result,,} != 'stringb') ]]; do
        echo Please enter only stringA or stringB:
        read result
done

echo "You have selected $result!"

exit

残念ながら、このコードは機能せず無限に繰り返されます。 whileループの2番目の部分を削除する文字列の1つと同じ場合にのみ比較できます$result。交換しよう||としましたが、次のエラーが発生します。||-o

./chk.sh: line 12: syntax error in conditional expression
./chk.sh: line 12: syntax error near `-o'
./chk.sh: line 12: `while [[ (${result,,} != 'stringa') -o (${result,,} != 'stringb') ]]; do' 

ベストアンサー1

を使いたいからです&&||

結果がstringAでもstringBでもない場合は、ループを繰り返す必要があります。どちらの文字列も両方と同じではないため、ループは終了します。

以下でパターンを使用することもできます[[ ... ]]

while [[ ${result,,} != string[ab] ]]

おすすめ記事