Il [] operatore in bash è lo zucchero sintattico per una chiamata a test , che è documentato in man test . "o" è espresso da un infisso -o , ma hai bisogno di un "e":
while [ $guess != 5 -a $guess != 10 ]; do
Esistono 2 modi corretti e portatili per ottenere ciò che desideri.
Il buon vecchio shell sintassi:
while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do
E bash sintassi (come specificato):
while [[ "$guess" != 5 && "$guess" != 10 ]]; do
Il modo portatile e robusto è usare un case dichiarazione invece. Se non ci sei abituato, potrebbero essere necessari alcuni sguardi solo per capire la sintassi.
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
Ho usato while true ma in effetti potresti usare case dichiarazione lì direttamente. Tuttavia, diventa peloso da leggere e mantenere.
while case $guess in 5 | 10) false;; *) true;; esac; do ...