Linux 使用;及;在Bash-while循环中

Linux 使用;及;在Bash-while循环中,linux,bash,Linux,Bash,好的,基本上这就是脚本的样子: echo -n "Guess my number: " read guess while [ $guess != 5 ]; do echo Your answer is $guess. This is incorrect. Please try again. echo -n "What is your guess? " read guess done echo "That's correct! The answer was $guess!" 我想改变的是这一

好的,基本上这就是脚本的样子:

echo -n "Guess my number: "
read guess

while [ $guess != 5 ]; do
echo Your answer is $guess. This is incorrect. Please try again.
echo -n "What is your guess? "
read guess
done

echo "That's correct! The answer was $guess!"
我想改变的是这一行:

while [ $guess != 5 ]; do
对这样的事情:

while [ $guess != 5 and $guess != 10 ]; do

在Java中,我知道“和”是“&&”,但这在这里似乎不起作用。使用while循环是否正确?

bash中的
[]
操作符是调用
test
的语法糖,这在
mantest
中有记录。“或”由中缀
-o
表示,但您需要一个“and”:


有两种正确且便于携带的方法可以实现您的目标。
好的旧
shell
语法:

while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
bash
语法(如您所指定):


可移植且健壮的方法是使用
case
语句。如果您不习惯,可能需要看几眼才能了解语法

while true; do
    case $guess in 5 | 10) break ;; esac
    echo Your answer is $guess. This is incorrect. Please try again.
    echo -n "What is your guess? "
    read guess  # not $guess
done
我使用了
而true
,但实际上您可以直接使用
case
语句。然而,阅读和维护它会让人毛骨悚然

while case $guess in 5 | 10) false;; *) true;; esac; do ...

是的,我的错误“和”是我应该使用的。这就解释了为什么我早些时候尝试时“-o”不起作用;我只是认为当它给我一个错误时,它只适用于if语句。非常感谢您的及时回复!注意:这不是POSIX,因此不可移植。感谢您花时间让我知道,我注意到现在我没有将这两个语句括起来,这就是它不起作用的原因。问题标题最初是“或”,而不是“和”。当然,根据德·摩根定律,无论你用“我想要5或10”来表达要求,还是用双重否定来表达“我不想要一个不是5也不是10的答案”,逻辑上都是一样的。
while true; do
    case $guess in 5 | 10) break ;; esac
    echo Your answer is $guess. This is incorrect. Please try again.
    echo -n "What is your guess? "
    read guess  # not $guess
done
while case $guess in 5 | 10) false;; *) true;; esac; do ...