Der [] Operator in Bash ist syntaktischer Zucker für einen Aufruf von test , die in man test dokumentiert ist . „oder“ wird durch ein angehängtes -o ausgedrückt , aber Sie brauchen ein "und":
while [ $guess != 5 -a $guess != 10 ]; do
Es gibt 2 richtige und tragbare Möglichkeiten, um das zu erreichen, was Sie wollen.
Gute alte shell Syntax:
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
Und bash Syntax (wie Sie angeben):
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
Der tragbare und robuste Weg ist die Verwendung eines case Aussage statt. Wenn Sie nicht daran gewöhnt sind, brauchen Sie vielleicht ein paar Blicke, um sich mit der Syntax vertraut zu machen.
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
Ich habe while true verwendet aber Sie könnten tatsächlich den case verwenden Aussage dort direkt. Es wird jedoch schwierig zu lesen und zu pflegen.
while case $guess in 5 | 10) false;; *) true;; esac; do ...