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 :

Initialiser des variables dynamiquement et leur affecter une valeur


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Par défaut Initialiser des variables dynamiquement et leur affecter une valeur
    Bonjour,

    Je me retrouve bloquer mais peut être que ma méthode de raisonnement est en plus totalement fausse.

    J'ai besoin de récupérer dans des fichiers de configurations (tjs à la 4eme ligne) des noms de colonnes que je souhaite utiliser comme variable par la suite.
    Le problème est plutôt dans la seconde partie où je veux réutiliser ce nom pour nommer ma variable.
    En effet j'utilise ce nom pour faire des sed multiples dans un programme tiers

    exemple du fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # x Configuration File                                                                                                                                 x
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    #GENFYC;GENDYV;GENMOD;GENDST;RETENTION;FYC_TARGET;PROGZ;VARY;GENSM37;GENERR;
    #Fichier;Division;Module;repertoire_destination;Retention_arch;Fichier_envoye;ABAP;VARIANTE;SM37;Rep_erreur;
    /SAS/IN/FPA/FPAKISSPCI;LLDI;FI;/admineat/exp/sas/domain_FI/PCI/TAM;MONTHLY;FPAKISSPCI;ZMU21040;FPAKISSPCI;ZMU21040-FPAKISSPCI;GENERR
    /SAS/IN/FPA/FPAKISSYSL;LLDI;FI;/admineat/exp/sas/domain_FI/PCI/TAM;MONTHLY;FPAKISSYSL;ZMU21040;FPAKISSYSL;ZMU21040-FPAKISSYSL;GENERR
    /SAS/IN/FPA/FPAKISSLPB;LLDI;FI;/admineat/exp/sas/domain_FI/PCI/TAM;MONTHLY;FPAKISSLPB;ZMU21040;FPAKISSLPB;ZMU21040-FPAKISSLPB;GENERR
    exemple de commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    param2=$(awk -F ";" 'NR==4 {print $2}' FILE.conf)
    $(echo $param)=5 
    -bash: GENDYV=5: command not found

    en bref, ma premiere commande permet de récupérer le nom d'une variable que je souhaite initialiser par une valeur. Mais je ne sais pas comment faire. J'ai eu le même problème avec tableau & co.

    Aidez moi

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

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

    un tableau associatif devrait faire le travail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare -A aAr
    var="valeur"
    aAr["$var"]="(autre) valeur"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 339
    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 339
    Par défaut
    Sinon, un exemple en bash (même si je préfère la solution de N_BaH) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ declare TITI=TOTO
    $ declare ${TITI}=tutu
    $ echo $TOTO
    tutu

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Par défaut
    J'ai peut être fait un truc peu optimisé mais qui marche

    en tout cas merci beaucoup car je n'avais pensais au tableau de hash

    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
     
    [root@eufraecft075 ~]# cat /tmp/ex1
    i=1
    NUMBER=$(awk -F ";" 'NR==4 {print NF}' FILES.conf)
    declare -A ARRAY
    LINE=$(awk -F ";" 'NR==4 {print $0}' FILES.conf)
    while [ $i -lt $NUMBER ]
    do
        KEY=$(echo $LINE | cut -d ";" -f ${i})
        ARRAY["$KEY"]="$i"
        echo "Valeur de ${KEY} : ${ARRAY["$KEY"]}"
        #echo $KEY
        i=`expr $i + 1`
    done
    [root@eufraecft075 ~]# sh /tmp/ex1
    Valeur de GENFYC : 1
    Valeur de GENDYV : 2
    Valeur de GENMOD : 3
    Valeur de GENDST : 4
    Valeur de RETENTION : 5
    Valeur de FYC_TARGET : 6
    Valeur de PROGZ : 7
    Valeur de VARY : 8
    Valeur de GENSM37 : 9
    Valeur de GENERR : 10

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 339
    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 339
    Par défaut
    !!! ON NE SE CONNECTE PAS INUTILEMENT EN TANT QUE ROOT !!!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    Par défaut
    oulala !

    il faut
    1. préciser, sur la première ligne, dans le shebang,, le shell à utiliser .
    2. rendre le script exécutable.
    3. l'appeler en indiquant son chemin (au moins relatif).
    4. les noms de variables tout en majuscules sont réservés aux variables d'environnement, pas aux variables des utilisateurs.


    /!\ /bin/sh n'est pas nécessairement un lien vers /bin/bash.
    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
    $ cat ./monScript 
    #!/bin/bash
     
    declare -A aAr
    read num line < <(awk -F ";" 'NR==4 {print NF,$0}' ./FILES.conf)
    printf '%s\n' "$num" "$line"
    for ((i=1;i<num;i++))
    do
        key=$(cut -d ";" -f ${i} <<<"$line")
        aAr["$key"]="$i"
        echo "Valeur de ${key} : ${aAr["$key"]}"
    done
    echo "plus simplement :"
    IFS=';' read -a ar  < <(awk -F ";" 'NR==4 {print $0}' ./FILES.conf)
    echo "les tableaux indexés commencent à zéro."
    for i in ${!ar[@]}
    do
        echo "Valeur de ${ar[i]} : $i"
    done
    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
    $ ./monScript
    11
    #GENFYC;GENDYV;GENMOD;GENDST;RETENTION;FYC_TARGET;PROGZ;VARY;GENSM37;GENERR;
    Valeur de #GENFYC : 1
    Valeur de GENDYV : 2
    Valeur de GENMOD : 3
    Valeur de GENDST : 4
    Valeur de RETENTION : 5
    Valeur de FYC_TARGET : 6
    Valeur de PROGZ : 7
    Valeur de VARY : 8
    Valeur de GENSM37 : 9
    Valeur de GENERR : 10
    plus simplement :
    les tableaux indexés commencent à zéro.
    Valeur de #GENFYC : 0
    Valeur de GENDYV : 1
    Valeur de GENMOD : 2
    Valeur de GENDST : 3
    Valeur de RETENTION : 4
    Valeur de FYC_TARGET : 5
    Valeur de PROGZ : 6
    Valeur de VARY : 7
    Valeur de GENSM37 : 8
    Valeur de GENERR : 9
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/10/2009, 20h24
  2. initialisation des variable avec une boucle
    Par grospatapouf dans le forum Langage
    Réponses: 10
    Dernier message: 10/01/2009, 12h17
  3. nombre des variables dynamique dans une fonction
    Par Abdelkaoui dans le forum C
    Réponses: 10
    Dernier message: 29/02/2008, 15h37
  4. Initialiser des variables dans une méthode Statique
    Par ero-sennin dans le forum Langage
    Réponses: 10
    Dernier message: 07/12/2007, 15h26
  5. réorganiser une table avec des variables dynamiques
    Par Stefan_H dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/11/2007, 12h40

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