Question

Quelle est la différence:

if IsServerStarted ; then ...

et

if [ IsServerStarted -eq 0 ] ; then ...

me semble que ces deux déclarations doivent être équivalentes? Étrangement la deuxième déclaration est toujours vrai.

Était-ce utile?

La solution

Ce qui suit exécute la fonction d'enveloppe ou exécutable dans $PATH nommé IsServerStarted, et si son code de sortie est 0 (à savoir true), exécute la branche then. Si une telle fonction ou exécutable n'existe pas, le code de sortie sera non-0 (à savoir faux) et la branche then est sautée.

if IsServerStarted ; then ...

Ce qui suit a [ (alias test) vérifier si IsServerStarted est un nombre entier égal à 0, qui (IsServerStarted même pas contenant un seul chiffre) est toujours false . Ainsi, les sorties de [ avec un code non-0 (à savoir faux) et la branche then est toujours sautées.

if [ IsServerStarted -eq 0 ] ; then ...

Autres conseils

En fait, le second donnera une erreur se plaignant que « IsServerStarted » n'est pas un entier valide. Il est considéré comme une constante de chaîne pour quelque chose comme

var="IsServerStarted"
if [ IsServerStarted == "$var" ] ; then

réussirait (ou l'échec si elle n'a pas été égal).

ndim est correct en ce qui concerne l'exécutable ou une fonction dans le premier exemple que vous avez donné.

Un couple plus de variations à considérer:

if $IsServerStarted ; then ...

Dans celle-ci, la if est évaluée sur la base de la valeur de retour d'une commande (exécutable ou une fonction) qui est contenue dans la IsServerStarted variable. Donc, vous pouvez définir IsServerStarted=true et la if réussiriez depuis true est une SHELL qui retourne toujours vrai. Vous pouvez définir IsServerStarted='grep popsicle freezer' and theif` passerait ou ne selon que vous étiez hors de friandises.

if [ $IsServerStarted -eq 0 ]; then ...

Ce test simplement si la variable est égale à zéro. Si ce n'est pas un entier valide, il provoque un message d'erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top