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

Linux Discussion :

Problème de passage de variable vide


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant technique dans les ERP
    Inscrit en
    Octobre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant technique dans les ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2005
    Messages : 14
    Par défaut Problème de passage de variable vide
    Bonjour à tous,

    Voilà, j'ai un problème de passage de variable vide à un script sh à l'intérieur d'un autre script sh.

    Explication :
    Dans le premier script, je créé plusieurs variables tableau et dans une boucle, j'utilise leurs valeurs en les passant à un script que j'appelle dans cette même boucle.
    Jusque là, pas de problème.

    Seulement, lorsque la tableau à un certain index contient une valeur nulle, c'est comme si aucun paramètre n'était passé au script.
    Cela a pour conséquence dans le script appelé de décalé les valeurs des paramètres.
    Par exemple : Si le paramètre 3 est vide dans la ligne d'appel, alors dans le script appelé, ce qui devait contenir la valeur du paramètre 3 contiendra la valeur du paramètre 4. D'où le décalage.

    La solution serait donc de protéger les valeurs passées entre deux "quote".
    Mais comme un problème n'arrive jamais seul, l'un des paramètres est le chemin complet d'un fichier de log.
    Donc si je protège mes paramètres avec des "quote", dans le script appelé, la valeur du paramètre en question sera de la forme 'un/chemin/vers/le_fichier.log'
    Et apparemment, cette forme avec les deux "quote" pose un problème lors du test d'existence du fichier.
    Voici un petit bout de code illustrant le test :
    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
     
    PSHOME=$1
    AS=$2
    PS=$3
    CMD=$4
    PURGE=$5
    SCR_LOG=$6
    TYPE=$7
    SSH_USER=$8
    SERVER=$9
     
    ERROR=0
    EDATE=`date '+%d-%m-%Y_%Hh%M'`
     
    echo 'SCR_LOG = '$SCR_LOG
    #Si le fichier n'existe pas
    if ! [[ -f $SCR_LOG ]]; then
      #Du code
    fi
    Or le fichier existe bien et pourtant à l'exécution, le code à l'intérieur de la boucle est exécuté.

    Il y aurait bien une solution en testant la valeur du paramètre avant de le passer au script appelé, mais ce n'est pas une solution très sexy.

    Alors si quelqu'un aurait une solution propre à me proposer, je suis preneur.


    Merci à tous

    Bonne journée

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Bonjour,

    sh n'utilise pas les tableaux !

    en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ ScriptAppele() { echo "$1";}
    $ ScriptAppelant() {
       arr[0]="foo"; arr[1]="bar"; arr[2]=''; arr[3]="baz"
       for i in "${arr[@]}"; do ScriptAppele "$i"; done
    }
    $ ScriptAppelant 
    foo
    bar
     
    baz
    pas de problème
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant technique dans les ERP
    Inscrit en
    Octobre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant technique dans les ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2005
    Messages : 14
    Par défaut
    Bonjour,

    En effet, j'ai lu que sh n'utilise pas les tableaux.
    Au début de mon script j'ai bien la ligne #!/bin/sh.

    J'ai donc été très surpris lorsque j'ai essayé d'utiliser les tableaux et que ça a marché

    Après, peut-être est-ce du au fait que je travail sur AIX 6.1, mais cela m'étonnerai car j'ai installé Cygwin sur Win7 et ça marche de la même façon.


    Concernant ton exemple, ça marche en effet, seulement le problème ne se pose pas dans le cas que vous présentez car vous ne passez les paramètres un à un en faisant des appels successifs à la fonction ScriptAppele.

    Si vous appeliez le script avec tous les paramètres, et que dans le script appelé vous affectiez chaque valeur à une variable, vous verriez que la variable censée contenir la valeur du paramètre 3 (donc '') contiendra la valeur du paramètre 4 (baz)


    Pouvez-vous me confirmer ce comportement ?


    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    bof
    en reprenant le tableau arr, tel que défini plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ ScriptAppele() { myArr=( "$@" ); printf '%s\n' "${myArr[@]}";}
    $ ScriptAppele "${arr[@]}"
    foo
    bar
     
    baz
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Homme Profil pro
    Consultant technique dans les ERP
    Inscrit en
    Octobre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant technique dans les ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2005
    Messages : 14
    Par défaut
    Ok, donc une solution qui réglerait le problème serait de passer les paramètres par un tableau.

    Je vais essayer ça.


    Merci pour tes réponses.

  6. #6
    Membre averti
    Homme Profil pro
    Consultant technique dans les ERP
    Inscrit en
    Octobre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant technique dans les ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2005
    Messages : 14
    Par défaut
    L'utilisation d'un tableau pour passer des paramètres règle le problème, mais rend l'utilisation du script moins claire.

    Une autre solution possible et qui marche dont j'ai fait mention dans mon premier post est de protéger les variables.
    Le problème que j'avais avec cette solution était que la valeur de la variable contenait ces "quote" de protection.

    Mais pour régler ce nouveau problème, il suffisait d'extraire les valeurs des paramètres sans les "quote" et en les réaffectant à eux-mêmes.

    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
     
    # Code dans le script d'appel
    $SCRIPT_APPELE "'"$VAR1"'" "'"$VAR2"'" "'"$VAR3"'" "'"$VAR4"'"
     
     
    # Code dans le script appelé
    VAR1=$1
    VAR2=$2
    VAR3=$3
    VAR4=$4
     
    VAR1=`expr "$VAR1" : "^'\(.*\)'$"`
    VAR2=`expr "$VAR2" : "^'\(.*\)'$"`
    VAR3=`expr "$VAR3" : "^'\(.*\)'$"`
    VAR4=`expr "$VAR4" : "^'\(.*\)'$"`
    De cette manière, il n'y a jamais plus de décalage lors de l'affectation des valeurs des paramètres dans le script appelé si dans la ligne d'appel du script appelant l'un des paramètres passés au script appelé est une valeur nulle.

    Ainsi l'utilisation du script appelé reste clair si tant est que le nom des paramètres correspond à leur usage


    Si quelqu'un a une meilleure solution ou s'il trouve que la solution présente n'est pas propre, j'accepterai volontiers ses remarques afin d'en discuter


    Merci à vous tous

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

Discussions similaires

  1. [AJAX] Passage de variable en ajax
    Par carlatocer dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/02/2007, 14h46
  2. Problème de passage de variable
    Par Duero dans le forum Balisage (X)HTML et validation W3C
    Réponses: 18
    Dernier message: 08/09/2006, 18h00
  3. Réponses: 4
    Dernier message: 20/06/2006, 13h12
  4. problème de passage de variables par POST
    Par jeanfrancois dans le forum Langage
    Réponses: 7
    Dernier message: 03/05/2006, 13h36
  5. [FLASH MX] Problème de passage de variable
    Par mandaillou dans le forum Flash
    Réponses: 2
    Dernier message: 15/11/2005, 10h22

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