J'essaie de faire fonctionner une boucle while simple dans bash qui utilise deux conditions, mais après avoir essayé de nombreuses syntaxes différentes à partir de divers forums, je ne peux pas m'empêcher de lancer une erreur. Voici ce que j'ai
while [ $stats -gt 300 ] -o [ $stats -eq 0 ]
J'ai aussi essayé:
while [[ $stats -gt 300 ] || [ $stats -eq 0 ]]
... ainsi que plusieurs autres constructions. Je veux que cette boucle continue alors que $stats is > 300
ou si $stats = 0
.
Les options correctes sont (par ordre croissant de recommandation):
# Single POSIX test command with -o operator (not recommended anymore).
# Quotes strongly recommended to guard against empty or undefined variables.
while [ "$stats" -gt 300 -o "$stats" -eq 0 ]
# Two POSIX test commands joined in a list with ||.
# Quotes strongly recommended to guard against empty or undefined variables.
while [ "$stats" -gt 300 ] || [ "$stats" -eq 0 ]
# Two bash conditional expressions joined in a list with ||.
while [[ $stats -gt 300 ]] || [[ $stats -eq 0 ]]
# A single bash conditional expression with the || operator.
while [[ $stats -gt 300 || $stats -eq 0 ]]
# Two bash arithmetic expressions joined in a list with ||.
# $ optional, as a string can only be interpreted as a variable
while (( stats > 300 )) || (( stats == 0 ))
# And finally, a single bash arithmetic expression with the || operator.
# $ optional, as a string can only be interpreted as a variable
while (( stats > 300 || stats == 0 ))
Quelques notes:
Citer les extensions de paramètres à l'intérieur de [[ ... ]]
et ((...))
est facultatif; si la variable n'est pas définie, -gt
et -eq
prendra une valeur de 0.
En utilisant $
est facultatif à l'intérieur de (( ... ))
, mais son utilisation peut aider à éviter les erreurs involontaires. Si stats
n'est pas défini, alors (( stats > 300 ))
assumera stats == 0
, mais (( $stats > 300 ))
produira une erreur de syntaxe.
Essayer:
while [ $stats -gt 300 -o $stats -eq 0 ]
[
est un appel à test
. Ce n'est pas juste pour le regroupement, comme les parenthèses dans d'autres langues. Vérifier man [
ou man test
pour plus d'informations.
Les extra [] à l'extérieur de votre deuxième syntaxe ne sont pas nécessaires et peuvent prêter à confusion. Vous pouvez les utiliser, mais si vous devez, vous devez disposer d'espaces entre eux.
Alternativement:
while [ $stats -gt 300 ] || [ $stats -eq 0 ]