OS X bash脚本WHILE循环中的多重条件

Tyl*_*den 3 bash shell sh while-loop osx-mavericks

基本上我想做的是从std输入中读取一个变量,并检查该变量是否为1或2。如果不是,我想通知用户并再次询问,我认为while循环是有意义的(我正在使用bash外壳中的OS X小牛)

对于单个条件,此方法有效:

read result

while [[ "$result" != "1" ]];
do
echo $result
echo "You must enter 1 or 2. Please try again: "
read result
done
echo "success"
Run Code Online (Sandbox Code Playgroud)

但是当我尝试执行或条件时:

while [[ "$result" != "1" ]] || [[ "$result" != "2" ]];
Run Code Online (Sandbox Code Playgroud)

如果我在终端输入1或2,这与输入1或2不匹配。

while [[ "$result" != "1" ] || [ "$result" != "2" ]];
Run Code Online (Sandbox Code Playgroud)

产生语法错误。

while [[ "$result" != "1" || "$result" != "2" ]];
Run Code Online (Sandbox Code Playgroud)

这也不匹配1或2。有谁知道正确的语法?

anu*_*ava 5

实际上,您需要使用&&(AND)而不是||,因此请使用:

while [[ "$result" != "1" && "$result" != "2" ]];
Run Code Online (Sandbox Code Playgroud)

这是因为你检查是否$result就是not 1 and not 2