OS X bash脚本在循环时出现多个条件

OS X bash脚本在循环时出现多个条件,bash,shell,while-loop,osx-mavericks,sh,Bash,Shell,While Loop,Osx Mavericks,Sh,基本上,我想做的是从std输入读取一个变量,并检查该变量是1还是2。如果不是,我想通知用户并再次询问,我认为while循环是有意义的(我在bashshell中使用osxmavericks) 对于单一条件,此操作有效: read result while [[ "$result" != "1" ]]; do echo $result echo "You must enter 1 or 2. Please try again: " read result done echo "success"

基本上,我想做的是从std输入读取一个变量,并检查该变量是1还是2。如果不是,我想通知用户并再次询问,我认为while循环是有意义的(我在bashshell中使用osxmavericks)

对于单一条件,此操作有效:

read result

while [[ "$result" != "1" ]];
do
echo $result
echo "You must enter 1 or 2. Please try again: "
read result
done
echo "success"
但当我尝试做一个或条件:

while [[ "$result" != "1" ]] || [[ "$result" != "2" ]];
如果在终端中输入1或2,则与输入1或2不匹配。我也试过了

while [[ "$result" != "1" ] || [ "$result" != "2" ]];
这会产生语法错误

while [[ "$result" != "1" || "$result" != "2" ]];
这也不匹配1或2。
有人知道正确的语法吗???

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

while [[ "$result" != "1" && "$result" != "2" ]];

这是因为您正在检查
$result
是否为
不是1,也不是2

不用担心,我们有时在编写代码时都会犯这些错误。是的,但在BASH中使用不同的括号可以编写不止一种方法。