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 :

Script shell qui parcourt un fichier pour avoir la liste des paramètres


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut Script shell qui parcourt un fichier pour avoir la liste des paramètres
    Bonjour.

    J'ai fait un script shell dans lequel une fonction boucle sur une liste.
    Pour le moment la liste est dans le même fichier.
    Je souhaite mettre cette liste de paramètres dans un autre fichier et que ma fonction boucle sur les lignes de ce fichier.
    Je ne sais pas comment faire pour récupérer ma liste dans fichier avec cette structure :
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #paramètres utilisés
    param1 #premier paramètre
    param2 #deuxième paramètre
    param3 #troisième paramètre
    ou un systeme clé valeur.

    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    c'est un truc comme ça que tu cherches ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    declare -A tab  # declare un tableau associatif "tab"
     
    while read line; do
       if [[ "$line" =~ ^# ]]; then continue; fi    # on zappe les lignes de commentaires eventuels
       tab[${line%% *}]="${line#* }"
    done < fichier
     
    for key in "${!tab[@]}"; do
       value=${tab[$key]}
       echo "\"$key\" : \"$value\""
    done
    et le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ ./script.bash
    "param1" : "#premier paramètre"
    "param3" : "#troisième paramètre"
    "param2" : "#deuxième paramètre"

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Merci BufferBob.
    C'est à peu prés ça que je veux faire.
    Mon fichier "fichier" ressemble à ça
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ./script.bash
    "param1" : "#premier paramètre"
    "param3" : "#troisième paramètre"
    "param2" : "#deuxième paramètre"
    FIN
    Et les lignes servent de paramètres à :
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read line; do
       if [[ "$line" =~ ^# ]]; then continue; fi    # on zappe les lignes de commentaires eventuels
       fonction line
    done < fichier
    Je veux aussi zapper les éventuelles lignes vides et sortir quand j'arrive à la ligne = "FIN"

    PS ; je veux bien une explication détaillée de :
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
     if [[ "$line" =~ ^# ]];

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 289
    Par défaut
    Bonjour

    Il faut apprendre à utiliser le manuel. Tout y est.
    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
           [[ expression ]]
                  Renvoie un état de 0 ou 1 selon l'évaluation de la condition expression. Les conditions sont composées de primitives décrites ci-dessous dans CONDITIONS. Le découpage en mots et le développement des chemins ne sont pas effectués sur les mots entre [[ et
                  ]] ;  le  développement  des tildes, des paramètres, des variables, le développement arithmétique, la substitution de commande et de processus, ainsi que la suppression des protections sont effectués. Les opérateurs conditionnels comme -f ne doivent pas
                  être protégés afin d'être reconnus comme primitives.
     
                  Lorsqu'ils sont utilisés avec [[, les opérateurs < et > ordonnent d'un point de vue lexicographique en utilisant les paramètres linguistiques régionaux actuels.
     
           Consultez la description de la commande interne test (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) pour la gestion des paramètres (c'est-à-dire des paramètres manquants).
     
           Quand les opérateurs == et != sont utilisés, la chaîne placée à droite de l'opérateur est considérée comme étant un motif dont la correspondance est recherchée selon les règles décrites ci-dessous dans Motifs génériques, comme si l’option extglob  de  l’inter‐
           préteur  était  activée.  L’opérateur = est équivalent à ==. Si l'option d'interpréteur nocasematch est activée, la mise en correspondance est effectuée sans tenir compte de la casse (différence majuscule/minuscule) des caractères alphabétiques. La valeur ren‐
           voyée est 0 si les chaînes correspondent (==), ou ne correspondent pas (!=), au motif et 1 sinon. Toute partie du motif peut être protégée pour forcer la partie protégée à correspondre en tant que chaîne.
     
           Un opérateur binaire supplémentaire, =~, est disponible, avec la même priorité que == et !=. Lorsqu'il est utilisé, la chaîne à droite de l'opérateur est considérée comme une expression rationnelle étendue et est mise en correspondance  en  conséquence  (comme
           avec regex(3)). La valeur renvoyée est 0 si la chaîne correspond au motif et 1 si elle ne correspond pas. Si l'expression rationnelle n'est pas syntaxiquement correcte, la valeur renvoyée de l'expression conditionnelle est 2. Si l'option d'interpréteur nocase‐
           match est activée, la mise en correspondance est effectuée sans tenir compte de la casse. Toute partie du motif peut être protégée pour forcer la partie protégée à correspondre en tant que chaîne. Les expressions entre  crochets  des  expressions  rationnelles
           doivent  être  traitées prudemment car les caractères de protection habituels perdent leur signification entre crochets. Si le motif est stocké dans une variable de l’interpréteur, la protection de développement de variable force le motif entier à correspondre
           en tant que chaîne. Les sous-chaînes mises en correspondance avec des sous-expressions entre parenthèses dans l'expression rationnelle sont sauvegardées dans la variable tableau BASH_REMATCH. L'élément d'indice 0 de BASH_REMATCH est la partie de la chaîne cor‐
           respondant à l'expression rationnelle complète. L'élément d'indice n de BASH_REMATCH est la partie de la chaîne correspondant à la n-ième sous-expression entre parenthèses.
    (Il faut lire jusqu'au bout)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Match-beginning-of-line operator (^) matches the empty string immediately after a newline, regardless of whether eflags, the execution flags of regexec(), contains REG_NOTBOL.
    ^ signifie donc le début de ligne.

    La condition teste donc si la ligne commence par un croisillon (#). C'est alors un commentaire.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    on peut aussi recommander de se renseigner sur les formats de données. stfw: Comma Separated Values, champs à longueurs fixes, base de données...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Merci.
    Ce que je cherchais à comprendre c'était

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

Discussions similaires

  1. Script shell qui reconstitue une arborescence de fichiers
    Par cacoole dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 19/02/2014, 16h44
  2. Script shell qui format mon fichier
    Par mlkndiaye dans le forum Linux
    Réponses: 0
    Dernier message: 21/05/2010, 17h32
  3. Réponses: 3
    Dernier message: 09/11/2009, 12h42
  4. Réponses: 0
    Dernier message: 03/06/2008, 11h44
  5. Réponses: 7
    Dernier message: 21/04/2005, 15h55

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