web-dev-qa-db-fra.com

Vérifier si une condition est fausse

Il semble que la question soit facile. Je me demande pourquoi la recherche sur Google n’a rien donné d’aide - ni dans StackOverflow, ni dans les tutoriels. J'ai juste besoin de vérifier avec bash qu'une condition est fausse.

De ce que j'ai trouvé j'ai essayé

if ! [ 0==2 ]; then echo Hello; fi

et

if [ ! 0==2 ]; then echo Hello; fi 

aucun d'entre eux n'imprime Hello.

Je n'ai trouvé que deux questions similaires, mais la réponse finale dans les deux cas était un code restructuré pour ne pas utiliser la condition "fausse".

37
Hi-Angel

Tu veux dire:

if ! [ 0 == 2 ]; then
  echo Hello;
fi

Vous avez manqué d'espace autour de l'opérateur d'égalité.

C’est peut-être le moment de lire http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html - en particulier les sections sur if puis else et les opérateurs. J'ai l'habitude de l'ouvrir quand j'écris des scripts.

63
wojciii

Pour les évaluations mathématiques, utilisez (( )) en bash. Pour le texte, utilisez [[ ]].

if (( $i == 0 )); then
  echo "i is 0"
else
  echo "i is unequal 0"

En savoir plus sur les opérateurs de comparaison dans bash.

Et plus sur la double parenthèse

10
RedX

Si vous utilisez la commande test ([..]) vous pouvez utiliser l’option de comparaison pour un entier: -eq, égal et -ne, inégal.

if [ 0 -eq 2 ]; then echo true ; else echo false ; fi # false
if [ 0 -eq 0 ]; then echo true ; else echo false ; fi # true

if [ 0 -ne 2 ]; then echo true ; else echo false ; fi # true
if [ 0 -ne 0 ]; then echo true ; else echo false ; fi # false

En bash l'opérateur [...] est l’équivalent de test, une commande qui vérifie les types de fichiers et compare les valeurs; test est une commande interne: si vous demandez à votre shell avec type [ il répondra [ is a built in Shell command. Vous pouvez trouver le binaire trop souvent dans /usr/bin/[.

Le SYNOPSIS est test EXPRESSION, comme vous pouvez le lire dans man test ou de info coreutils test invocation.

Une expression omise est définie par défaut sur false. Sinon, EXPRESSION est vraie ou fausse et définit le statut de sortie.

Ceci est un extrait de l'homme qui cam aider à comprendre un peu mieux

  • (EXPRESSION) EXPRESSION est vraie. Il est donc facile de commettre l'erreur à considérer comme une opération 0==1. (L'opération est 0 == 1 avec des espaces, 0==1 est une expression).

  • ! EXPRESSION EXPRESSION est fausse.

  • ...
  • INTEGER1 -eq INTEGER2 INTEGER1 est égal à INTEGER2
  • INTEGER1 -ne INTEGER2 INTEGER1 n'est pas égal à INTEGER2

De info coreutils test invocation vous pouvez en savoir plus sur l'état de sortie du test.

Etat de sortie:

 0 if the expression is true,
 1 if the expression is false,
 2 if an error occurred.
4
Hastur

En plus des évaluations mathématiques de bash, vous pouvez utiliser des expressions booléennes au lieu de if:

[max@localhost:~] $ (( 0 == 0 )) && echo True || echo False
True
[max@localhost:~] $ (( 0 != 0 )) && echo True || echo False
False
3
Maxim Egorushkin