[Shell] affectation de variable après &&

Résolu/Fermé
ITMan - Modifié par ITMan le 6/05/2011 à 18:54
 ITMan - 6 mai 2011 à 19:38
Bonjour,

Je suis en train de créer un petit script de sauvegarde pour le boulot, avec envoi de mail en html pour le rapport. (c'est pour le contexte, même si ce n'est pas très utile).

Voila mon problème : J'ai une variable dans laquelle je note toutes les erreur (ou pas) comme ceci :

#!/bin/bash   
mavariable="toto "   
(echo "pouet pouet" && mavariable="$mavariable titi")||mavariable="$mavariable tata" 
echo $mavariable    # juste pour vérifier


normalement l'echo devrait renvoyer "toto titi" si la commande (ici echo "pouet pouet") a réussi, et "toto tata" si elle a échoué, or après le script la variable ne contient que "toto "....

Merci de votre aide amis Linuxiens ;)

Config : Ubuntu Server 10.04 LTS

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
6 mai 2011 à 19:10
Salut,

C'est parce que tu exécutes ton 1er test dans un shell fils (entre parenthèses), de ce fait la variable n'est pas exportée.

Donc soit tu vires les parenthèses qui ne servent à rien en plus, soit du les changes pour des accolades (avec les accolades on reste dans le shell parent).


#!/bin/bash   
mavariable="toto "   
echo "pouet pouet" && mavariable="$mavariable titi"||mavariable="$mavariable tata" 
echo $mavariable    # juste pour vérifier

Ou
#!/bin/bash   
mavariable="toto "   
{echo "pouet pouet" && mavariable="$mavariable titi"}||mavariable="$mavariable tata" 
echo $mavariable    # juste pour vérifier
1
Merci de ta réponse zipe31 !

je pensait que mes parenthèses servaient car si j'écris ton 1er exemple la 3ème commande n'est exécutée que si la 2ème échoue (je dois me tromper d'après tes dires mais c'est comme ça que je l'avais compris)... effectivement après avoir vérifié même sans parenthèses c'est bien la commande 1 qui lance la commande 2 OU la commande 3 selon le code d'erreur qu'elle renvoie.

J'ai pris l'exemple ici : http://www.haypocalc.com/wiki/Bash#Test_.28if.29
Je croyais que les parenthèses ne servaient qu'a définir des priorités comme en maths ^^

Merci beaucoup je ne savais pas qu'elles engendraient un sous shell (je ne vais pas faire un export pour ca^^)

Pareil pour les accolades, encore des petites choses à rajouter dans mon pense bête Linux ;)

Bonne soirée !
0