Probleme perte de variable en sortie de boucle - Shell/Batch - Programmation
Marsh Posté le 08-02-2005 à 16:50:43
up, le probleme a ete contourné en ecrivant les resultats dans un fichier, mais c'est sale et ca me plait pas, si quelqu'un a une idée plus propre qu'il n'hesite pas
Marsh Posté le 08-02-2005 à 17:06:47
Je te conseille de poster le vrai script que tu fais tourner, parce que dans ce que tu as poste (independement de "toto" et "machin" ) y'a au moins 4 erreurs (manque les back quotes, "end if", manque un ; apres machin...).
Sinon, il n'y a aucune raison que ca ne marche pas. A mon avis tu joues avec les pipes et read. Mais forcement si tu poste pas ton code, on peut pas deviner.
Marsh Posté le 08-02-2005 à 23:40:59
ok je pensais juste que ca venait d'un truc style, lorsqu'on lance la boucle il crée un fork, du coup les variables sont incrementés dans le process fils mais pas remonté dans le pere ou un truc du genre.
Demain j'essairai de poster le code, tout ce que je peux dire la c'est que la boucle est lancé comme ca:
cat $fichier | grep "switchs" | grep -v "^#" | while read host ip reste
do
.
.
.
done
Avec une incrementation dans la boucle selon les resultats (une trace prouve qu'elle se fait bien). host contient le nom de chaque switch, ip leur ip et reste contient des conneries dont on se sert pas.
J'aurai quand meme du mal a poster le code vu qu'il doit faire au moins 500 lignes...disons qu'il n'y a pas d'erreur de syntaxe a l'interieur, tout se passe bien, les variables sont bien incrémentés sans soucis, mais lorsque la boucle se terminent, elles retrouvent toutes leur valeurs d'origine soit 0
Marsh Posté le 09-02-2005 à 02:39:50
Ben oui donc c'est exactement ce que tu dis : fork, process fils... Toussa. Mais dans le code que tu as poste plus haut ca ne se produit pas puisqu'il n'y a pas de pipe et donc pas de fork, et donc on ne risquait pas de pouvoir t'aider.
Bref ouvre une parenthèse avant le while et ferme la après que tu ais utilisé tes variables (A et B) pour la dernière fois. Par exemple :
#!/bin/sh |
Marsh Posté le 08-02-2005 à 11:31:30
Bonjour, je suis entrain de faire un script bash pour remonter le statut des ports des switchs
A l'interieur j'ai une boucle qui incremente des variables. Lorsque la boucle est finie, les variables reviennent a 0.
En gros l'idée du script c'est ca:
A=0
B=0
while toto
do
A=expr $A + 1
if machin then
B=expr $B + 1
end if
echo $A #on obtient bien l'incrementation a chaque boucle
echo $B
done
echo $A #on obtient 0
echo $B #on obtient 0
Une idée