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] Visibilité globale


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 63
    Points
    63
    Par défaut [Variable] Visibilité globale
    Bonjour,

    Comment rendre une variable présente dans une FONCTION visible en dehors de celle-ci ?
    Notamment dans une structure de contrôle CASE.

    J'espère avoir été clair dans mon explication.

    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Ce qui est déstabilisant avec bash, c'est que les variables ne sont pas locales à la fonction par défaut. Il faut utiliser le mot "local" en plus pour qu'elle deviennent locales.
    Donc les variables dans une fonction sont déjà globales!

    La question est donc "Qu'est-ce qui te fait penser que la variable n'est pas globale ?"
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Ce qui est déstabilisant avec bash, c'est que les variables ne sont pas locales à la fonction par défaut. Il faut utiliser le mot "local" en plus pour qu'elle deviennent locales.
    Donc les variables dans une fonction sont déjà globales!

    La question est donc "Qu'est-ce qui te fait penser que la variable n'est pas globale ?"
    Car elle n'est pas reconnue ci-après avec ou sans accolade

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    case $# in
            0)      echo -e "# Alimenter les variables ci-dessous \n# contexte instance heure_debut heure_fin type_log date " >${contexte}/diff/tmp/log/list_file

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour,

    avec tout le script, ou juste la partie où cette variable est déclarée/assignée, ce serait plus évident, que de montrer là où elle est utilisée/invisible !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 63
    Points
    63
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function F1
    {
            # Declaration des variables
            contexte=$(echo $1 |tr [:lower:] [:upper:])
            instance=$(echo $2 |tr [:lower:] [:upper:])
           date_du_jour=$(echo $(date '+%Y/%m/%d') | sed 's/\//-/g') # Date du jour au format AAAA-MM-JJ

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    $# désigne le nombre d'arguments ? Si c'est 0, alors tu indiques les arguments qui doivent être présents ? Et tu les renvoies dans un fichier au chemin variable ?

    Sauf que le chemin dépend du premier argument, et le premier argument est vide puisque il y en a 0. Donc le "contexte" n'est pas un mot en majuscule.

    Ai-je bien compris ?
    Sinon, je soutiens la demande d'informations complémentaires de N_BaH.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    $# désigne le nombre d'arguments ? Si c'est 0, alors tu indiques les arguments qui doivent être présents ? Et tu les renvoies dans un fichier au chemin variable ?

    Sauf que le chemin dépend du premier argument, et le premier argument est vide puisque il y en a 0. Donc le "contexte" n'est pas un mot en majuscule.

    Ai-je bien compris ?
    Sinon, je soutiens la demande d'informations complémentaires de N_BaH.
    Effectivement quand on lance le script sans argument, il créé un fichier list_file, ça marche lorsque je ne mets pas de chemin spécifique (voir ci-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    case $# in
            0)      echo -e "# Alimenter les variables ci-dessous \n# contexte instance heure_debut heure_fin type_log date " >list_file
    ça ne marche pas avec ce chemin ${contexte}/diff/tmp/log/list_file

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Hum. Pas sûr qu'on se soit compris. $1 est le premier paramètre de la fonction, pas du script.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    et la fonction ? tu l'appelles où, et comment ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,
    C'est beau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_du_jour=$(echo $(date '+%Y/%m/%d') | sed 's/\//-/g') # Date du jour au format AAAA-MM-JJ
    Je crois que je vais faire pareil maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #mettre 25 dans la variable toto
    toto=$(echo "25")
    #non, en fait je vais mettre 2 dans la variable toto
    toto=$(echo "25" | sed 's/25/2/g')


    PS: au moins un petit man date ne serait pas superflu
    Cordialement.

Discussions similaires

  1. Variables super-global ?
    Par meliandah dans le forum Langage
    Réponses: 8
    Dernier message: 13/05/2007, 16h14
  2. Variable environnement / globale
    Par crochepatte dans le forum Langage
    Réponses: 14
    Dernier message: 18/09/2006, 09h55
  3. Variable super globale au projet
    Par florent149 dans le forum Général VBA
    Réponses: 35
    Dernier message: 11/07/2006, 10h52
  4. Réponses: 4
    Dernier message: 20/06/2005, 15h04
  5. [.NET] [C#] Variable super global ?
    Par choas dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/04/2005, 15h27

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