Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/03/2007, 12h39   #1
Membre du Club
 
Inscription : novembre 2006
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 80
Points : 50
Points : 50
Par défaut Variable globale dans un script shell

J'utilise le code suivant pour calculer une somme :

Code :
1
2
3
4
5
6
7
 
inOutOctetConnector=0
cat $fichier | grep $valeur_cherche | while read ligne
        do
                value=`echo $ligne | cut -d ';' -f2`
                inOutOctetConnector=`expr $inOutOctetConnector + $value`
        done
donc j'ai initialisé la variable "inOutOctetConnector" mais après la boucle je ne retrouve aucune valeur. ni la valeur de l'initialisation ni la valeur calculée
oumokhtar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 12h40   #2
Membre du Club
 
Inscription : novembre 2006
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 80
Points : 50
Points : 50
J'ai oublié de poser ma question : Comment retrouver la valeur de ma variable modifiée dans la boucle??
j'ai utilisé "export" "set" et ça marche pas
oumokhtar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 14h56   #3
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
je parie que tu cherche a "voir" cette variable apres avoir lancer le script

donc c'est normal :
un process fils ne peut en aucun cas "retourner" ou modifier un variable du pere ...

donc tu ajoute DANS le script par exemple un echo $ma_variable

cela te permettra de la visualiser
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 15h21   #4
Membre du Club
 
Inscription : novembre 2006
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 80
Points : 50
Points : 50
Non, je veux récupérer ma variable "inOutOctets" à l'itérieur du script. mais une fois la boucle while est lancé je ne retrouve pas ma variable
oumokhtar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 02h10   #5
Membre du Club
 
Inscription : novembre 2006
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 80
Points : 50
Points : 50
Par défaut allo

J'ai pas eu de retour, pour être plus claire sans passer par du code: Je voudrais modifier la valeur d'une variable à l'intérieur d'une bouvle "while" et récupérer le dernier résultat à la fin d'execution du while, J'arrive pas à récupérer la valeur de la variable. si je fais des echo de cette variable pendant l'execution du while j ai tjrs les bonne valeur, et quand je fais un echo apres l'execution de la boucle, ça ne me donne aucune valeur.
oumokhtar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 10h27   #6
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
Il y a donc un os .
Voici ce que je fait (exemple)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
 ls .. > toto
bash-3.1$ var=0
bash-3.1$ while read ligne
> do
> (( var = var + 1 ))
> echo $var
> done < toto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bash-3.1$ echo $var
22
cela fonctionne bien, idem dans un script evidement.

Comment fait tu pour que cela ne fonctionne pas ?
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 11h28   #7
Membre du Club
 
Inscription : novembre 2006
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 80
Points : 50
Points : 50
Voici un exemple de ce que je fais :
Code :
1
2
3
4
5
6
7
8
9
10
 
var=0
valeur=0
cat $fichier | grep $valeur_recherche | while read ligne
        do
                valeur=`echo $ligne | cut -d ';' -f2`
                var=`expr $var + $value`
                echo "var1=$var"
        done
echo "var2=$var"
mon script affiche toutes les valeur de "var" à l'interieur du "while" et une fois il sort de la boucle "var" est considéré comme une variable non initialisée ( comme s il n a jamais été initialisée ni utilisé)
oumokhtar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 11h35   #8
Membre du Club
 
Inscription : novembre 2006
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 80
Points : 50
Points : 50
J ai fais ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
val=0
[root@mcad7p33 ~]# cat toto | while read ligne
> do
> (( val = val + 1 ))
> echo $val
> done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@mcad7p33 ~]# echo $val
0
J'ai testé ton code, il marche bien, essai de voir mon code, Merci
oumokhtar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 12h47   #9
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
Ok compris le probleme ........
en faite celui vient de ce que le cat | while creer un "sous-shell" d'execution pour la boucle while, et donc un process fils ne peut modifier une variable du process pere ........

pour t'en sortir de maniere ellegante , il faut que la variable ne soit pas modifieé dans un sous shell .

Code :
1
2
3
4
5
6
7
8
9
10
11
 
#creation d un fifo (pipe nommé)
mkfifo fifo
cat $fichier | grep $valeur_recherche > fifo
while read ligne
do
 (( var = var + 1 ))
 echo $var
done < fifo
echo $var
rm fifo
et le tour est joué
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 18h01   #10
Membre du Club
 
Inscription : novembre 2006
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 80
Points : 50
Points : 50
Thanks,solution élegante
oumokhtar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2008, 10h05   #11
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 88
Points : 33
Points : 33
Bonjour,
J'ai le meme besoin, et le meme probleme que precedement, sauf que chez moi la methode avec le fifo ne marche pas...

Code :
1
2
3
4
5
6
7
8
9
i=0
cat listeFS | while read ligne
do
 if test $ligne = $name
then
        i=$(($i + 1))
fi
done
echo $i
Je voudrais pouvoir reutiliser la variable $i avec sa valeur accumulé pendant le "do"...
ChrisMan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2008, 10h49   #12
Membre éclairé
 
Avatar de KindPlayer
 
Inscription : février 2007
Messages : 470
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 470
Points : 386
Points : 386
Par défaut sans passer par une boucle

Code :
1
2
 
cat ton_fichier | grep ^${name}$ | wc -l
KindPlayer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2008, 10h51   #13
Membre éclairé
 
Avatar de KindPlayer
 
Inscription : février 2007
Messages : 470
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 470
Points : 386
Points : 386
Par défaut j'ai oublie que tu voulais recupérer la variable

donc tu fais match=$(la commande que j'ai donnee precedemennt)
KindPlayer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2008, 11h04   #14
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 88
Points : 33
Points : 33
Merci en effet, ca marche niquel !
ChrisMan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h23.


 
 
 
 
Partenaires

Hébergement Web