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".
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.
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"
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.
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.
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