IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Variable globale dans un script shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 80
    Points : 67
    Points
    67
    Par défaut Variable globale dans un script shell
    J'utilise le code suivant pour calculer une somme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    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

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    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

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    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

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 80
    Points : 67
    Points
    67
    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.

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Il y a donc un os .
    Voici ce que je fait (exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    Voici un exemple de ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é)

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    J ai fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    Thanks,solution élegante

  11. #11
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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"...

  12. #12
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut sans passer par une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cat ton_fichier | grep ^${name}$ | wc -l

  13. #13
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut j'ai oublie que tu voulais recupérer la variable
    donc tu fais match=$(la commande que j'ai donnee precedemennt)

  14. #14
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    Merci en effet, ca marche niquel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Variables globales dans script bat
    Par noOneIsInnocent dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 27/03/2015, 21h28
  2. Réponses: 2
    Dernier message: 18/12/2013, 15h07
  3. Garder en mémoire une variable dans un script shell
    Par Shinzel dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 16/05/2013, 16h54
  4. Variables globales dans scripts secondaires
    Par Okidor12 dans le forum Tcl/Tk
    Réponses: 3
    Dernier message: 13/02/2012, 16h54
  5. Réponses: 3
    Dernier message: 05/02/2008, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo