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 :

Cette écriture ne marche pas : echo $(NoIPVPS$i)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut Cette écriture ne marche pas : echo $(NoIPVPS$i)
    Bonjour,

    Mes variables NoIPVPS01, NoIPVPS02.... se trouvent dans /usr/local/.varVPSNoIP
    Je souhaites afficher leur valeur avec le petit script ci-dessous
    Mais les 2 $ à la suite ci-dessous, ca marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    source /usr/local/.varVPSNoIP
    for i in {01..07}
    do
      echo $(NoIPVPS$i)
    done
    Sinon la solution serait d'écrire une ligne pour chaque cas, mais je voulais essayer d'optimiser
    Qu'en pensez-vous svp ?

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

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

    j'en pense que des variables numérotées devraient être un tableau indexé.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Sinon on peut aussi utiliser l'indirection de variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    source /usr/local/.varVPSNoIP
    for i in {1..7}
    do
      var=$(printf 'NoIPVPS%02d' $i)
      echo ${!var}
    done
    Rq: je ne sais pas si c'est recommandé, mais, de toute façon, je préfèrerais passer par un tableau si c'est possible.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    on peut boucler sur la "racine" du nom des variables et une indirection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ var1=foo var2=bar var3=baz
    $ for i in ${!var*}; do echo "$v = ${!v}"; done
    var1 = foo
    var2 = bar
    var3 = baz
    $
    mais ce serait tellement plus simple avec un tableau.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut
    Merci pour toutes ces propositions qui m'éclairent sur toutes les possibilités.

    Mais oui bien sur les tableaux...j'en ai déjà utiliser dans d'autres scripts en plus mais je n'y avais pas penser là
    Je m'y attèle et je publie

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    declare -A varNIP
    varNIP=( [01]=$NoIPVPS01 [02]=$NoIPVPS02 [03]=$NoIPVPS03 [04]=$NoIPVPS04 [05]=$NoIPVPS05 [06]=$NoIPVPS06 [07]=$NoIPVPS07 )
     
    for i in "${!varNIP[@]}"
    do
    echo "${varNIP[$i]}"
    done

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    ou un tableau associatif, mais tu perds l'ordre des entrées - les indices d'un tableau associatif sont hashés, donc l'ordre est ±aléatoire (plutôt plus que moins).

    il y a d'autres choses dans le fichier sourcé ?
    c'est toi qui l'écrit ?
    que dois-tu faire avec ce qu'il y a dedans ?
    tu peux nous le montrer ? Il y a peut-être encore une autre façon de faire...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. [.htaccess] Pourquoi cette redirection ne marche pas ?
    Par brunoperel dans le forum Apache
    Réponses: 15
    Dernier message: 16/03/2010, 14h16
  2. pourquoi cette fonction ne marche pas?
    Par kazannova dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2008, 01h59
  3. [BATCH] echo \r\n marche pas
    Par Galevsky dans le forum Windows
    Réponses: 3
    Dernier message: 15/01/2008, 16h53
  4. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29
  5. Problem variable (Cette ligne ne marche pas sous FF)
    Par Death83 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 08/09/2005, 17h52

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