Bonjour,
For i in toto ;do if echo a ;then echo b ;else echo a ; fi , done
Tel qu'ecrite la rien, car la virgule a la fon va poser un probleme. SI on la remplace par un ; on va avoir :
1 2 3 4
| -bash-3.00$ for i in toto ;do if echo a ;then echo b ;else echo a ; fi ; done
a
b
-bash-3.00$ |
Qu'est-ce que ca fait :
for i in toto ; do
i va prendre la valeur 'toto', et la suite sera executee pour toutes les valeurs de i. Donc ici une seule fois.
1 2 3 4 5
|
if echo a
then echo b
else echo a
fi |
Le code execute sera le suivant : d'abord le "echo a" du if. Puis le test sur la valeur de retour (qui sera 0 si tout se passe bien), puis l'execution du then (si tout s'est bien passe) ou du else (si le premier "echo a" a retourne autre chose que 0).
Pour t'en rendre compte, tu peux faire le test avec une commande ne retournant pas 0 :
1 2 3 4
| -bash-3.00$ if ls /fhdsjkfhdskj ; then echo b ; else echo a; fi
/fhdsjkfhdskj: No such file or directory
a
-bash-3.00$ |
Il execute d'abord le ls, qui sort en erreur et affiche le message comme quoi le repertoire cherche n'existe pas, et ensuite, il va executer les instructions presentes dans le else.
qu'affiche la ligne de commande suivante ?
1 2 3 4 5
| a=1 ; b=$a ;a=2 ; export a ; echo $ ab
1b
2b
rien |
L'affectation n'affiche rien. Elle se fait, c'est tout.
Il en est de meme pour l'exportation de variable.
Enfin, le shell ne fa pas reconnaitre "$ab" comme etant deux variables, mais une seule, nommee "ab" qui n'a probablement jamais ete definie. Il va donc afficher rien du tout, mais aller a la ligne a la fin de l'echo.
Sauf si l'espace entre le $ et ab est volontaire, auquel cas le shell va affiche "$ ab"
Partager