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 :

[Résolu] --> Attribution de valeur à une variable en fonction d'une boucle


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Ingé
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingé
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Par défaut [Résolu] --> Attribution de valeur à une variable en fonction d'une boucle
    Bonjour,

    Je suis totalement débutant en shell et développe mon premier script. Celui-ci est assez simple mais je suis bloqué. Je vous explique ici ce que je souhaite faire et présente ci-dessous le code.

    J'ai 11 paramètres définis dans mon script. Ces 11 paramètres doivent être réinjectés dans un fichier. Pour cela, je pensais procéder par une boucle où en fonction de la valeur d'un indice i, j'affecte la valeur du ième paramètre à une variable intermédiaire pour ensuite l'injecter dans le fichier.

    Voici le code :
    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
    34
    35
    36
     
    #!/bin/bash
     
    F1=1
    F2=1.2
    F3=1.5
    F4=6
    F5=28
    F6=18
    F7=12
    F8=1
    F9=1.36
    F10=0.2
    F11=53
    #
    fichier=monfichier
    #
    i=1
    imax=11
    #
    while test $i != $imax
    do
    #
        Int=F$i
    #
        Resultat=$(!Int)
    #
        A=XF$i
    #
        sed -i 's/'$A'/'$Resultat'/g' $fichier
        let i++
    done
    #
    #nedit $fichier &
    #
    exit 0
    En gros, je veux que la variable Resultat prenne la valeur 1 lors i=1, 1.2 lorsque i=2 et ainsi de suite.

    Lorsque je lance mon script avec la commande :
    J'ai le message :
    !Int: command not found
    Je bute là dessus depuis un moment et n'arrive pas à m'en sortir. Si quelqu'un a une solution, je suis preneur.

    Merci d'avance.

  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 ne connaît pas les indirections (${!var})

    rend ton script exécutable, et exécute (depuis son emplacement) ainsi : ./nomDuScript.

    et utilise plutôt un tableau :
    Code à tester : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    F=(  _ 1 1.2 1.5 6 28 18 12 1 1.36 0.2 53 )
     
    for ((f=1; f<=${#F[@]};f++))
    do
       regex="s/$f/${F[f]}/g;$regex"
    done
    sed -i "$regex" fichier
    ±
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Ingé
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingé
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    sh ne connaît pas les indirections (${!var})

    rend ton script exécutable, et exécute (depuis son emplacement) ainsi : ./nomDuScript.

    et utilise plutôt un tableau :
    Code à tester : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    F=(  _ 1 1.2 1.5 6 28 18 12 1 1.36 0.2 53 )
     
    for ((f=1; f<=${#F[@]};f++))
    do
       regex="s/$f/${F[f]}/g;$regex"
    done
    sed -i "$regex" fichier
    ±
    Merci pour ta réponse. Après avoir posté, j'ai justement pensé à la solution avec un tableau et j'ai réussi. Je vais combiner avec ta solution qui est certainement plus épurée.

    Merci pour ton aide.

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/04/2015, 15h46
  2. Réponses: 2
    Dernier message: 20/11/2014, 15h24
  3. [XL-2010] Attribuer une valeur à une variable en fonction d'une autre
    Par jkiii dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/11/2013, 19h17
  4. Réponses: 1
    Dernier message: 20/01/2007, 14h06
  5. Réponses: 4
    Dernier message: 16/02/2006, 10h40

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