2015-02-27 1 views
-1

dans le code ci-dessous directement son passe à l'état autre que siSi la condition ne fonctionne pas dans bash

#!/bin/bash 
var=0 
if [ "$var" -eq "0" ] 
    then 
    echo $var 
else 
    echo $var 
fi 
+3

Votre code semble bien ... sauf les conditions 'if' et' else' ont le même résultat. Comment pouvez-vous faire la différence? – eigenchris

+0

À l'exception du problème de sortie indiqué par @eigenchris, le code que vous avez affiché fonctionne correctement. – John1024

Répondre

0

Ce code fonctionne manifestement exactement comme indiqué, sans changement d'aucune sorte.

Mettre dans un script appelé testscript, et en cours d'exécution PS4=':$LINENO+' bash -x testscript (pour imprimer chaque commande appelée précédé par le numéro de ligne dans le fichier source qui il vient), on obtient le résultat suivant:

:2+var=0 
:3+'[' 0 -eq 0 ']' 
:5+echo 0 
0 

maintenant , regardons les numéros de ligne dans cette trace, contre les numéros de ligne dans le fichier source d'origine:

#!/bin/bash    # line 1 
var=0      # line 2 -- :2+var=3 
if [ "$var" -eq "0" ]  # line 3 -- :3+'[' 0 -eq 0 ']' 
    then     # line 4 
    echo $var    # line 5 -- :5+echo 0 
else      # line 6 
    echo $var    # line 7 
fi 

... et le fait que nous sommes allés à la ligne 2, ligne 3 et ligne 5 dans cet ordre signifie que nous devons réellement ok la branche de la vérité, pas la branche else.

0
#!/bin/bash 
var=0 
if [ "$var" -eq "0" ] 
    then 
    echo $var 
    echo "Hello" 
else 
    echo $var 
    echo "ELSE" 
fi 

Il imprimera: 0 Bonjour

signifie qu'il va se boucle uniquement. Vérifiez une fois