[Shell] affectation de variable après &&

[Résolu/Fermé]
Signaler
-
 ITMan -
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

Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 377
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

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 !