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 :

Problème utilisation variable dans un shell.


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut Problème utilisation variable dans un shell.
    Bonjour

    Je me heurte a un pb particulièrement déroutant.
    L'idée est de chercher des motifs d'erreur dans des logs en excluant les erreurs connues.

    Voici un script ultra simple pour démontrer mon pb.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    #EXCLUS="-e \"ERRORTOTO\" -e \"ERRORTITI\" -e \"ERROR TITI\""
    EXCLUS="-e \"ERRORTOTO\" -e \"ERRORTITI\""
    echo EXCLUS : $EXCLUS
    echo "grep ERROR fichierlog | grep -v $EXCLUS"
    grep ERROR fichierlog | grep -v $EXCLUS
    et le fichier de log:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cat fichierlog
     
    ERROR TOTO
    ERRORTOTO
    ERROR TITI
    ERRORTITI
    ERROR TUTU
    Déjà ce script on ne peut plus simple échoue car il devrait me renvoyer les valeurs

    ERROR TOTO
    ERROR TITI
    ERROR TUTU.
    Or il me renvoie toutes les valeurs soit:
    ERROR TOTO
    ERRORTOTO
    ERROR TITI
    ERRORTITI
    ERROR TUTU
    En faisant un bash -x du script j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    + EXCLUS='-e "ERRORTOTO" -e "ERRORTITI"'
    + echo EXCLUS : -e '"ERRORTOTO"' -e '"ERRORTITI"'
    EXCLUS : -e "ERRORTOTO" -e "ERRORTITI"
    + echo 'grep ERROR fichierlog | grep -v -e "ERRORTOTO" -e "ERRORTITI"'
    grep ERROR fichierlog | grep -v -e "ERRORTOTO" -e "ERRORTITI"
    + grep ERROR fichierlog
    + grep -v -e '"ERRORTOTO"' -e '"ERRORTITI"'
    ERROR TOTO
    ERRORTOTO
    ERROR TITI
    ERRORTITI
    ERROR TUTU

    On s' aperçoit que le script enrobe les variables de simple quote et se termine donc anormalement.

    Si j'ai des blancs dans mes variables c'est vraiment la cata.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sh -x test.sh
    + EXCLUS='-e "ERRORTOTO" -e "ERRORTITI" -e "ERROR TITI"'
    + echo EXCLUS : -e '"ERRORTOTO"' -e '"ERRORTITI"' -e '"ERROR' 'TITI"'
    EXCLUS : -e "ERRORTOTO" -e "ERRORTITI" -e "ERROR TITI"
    + echo 'grep ERROR fichierlog | grep -v -e "ERRORTOTO" -e "ERRORTITI" -e "ERROR TITI"'
    grep ERROR fichierlog | grep -v -e "ERRORTOTO" -e "ERRORTITI" -e "ERROR TITI"
    + grep ERROR fichierlog
    + grep -v -e '"ERRORTOTO"' -e '"ERRORTITI"' -e '"ERROR' 'TITI"'
    grep: TITI": Aucun fichier ou répertoire de ce type

    Le shell applique un séparateur sur les blancs et casse la syntaxe.

    Avez vous une idée du problème?

    Avec mes remerciements pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Et comme ça , ça donne quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    EXCLUS="-e 'ERRORTOTO' -e 'ERRORTITI' -e 'ERROR TITI'"
    echo EXCLUS : $EXCLUS
    echo "grep ERROR fichierlog | grep -v $EXCLUS"
    eval "grep ERROR fichierlog | grep -v $EXCLUS"
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

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

    pour moi, ça marche comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ exclus="ERRORTOTO\|ERROR TITI"
    $ echo "ERROR TOTO
    ERRORTOTO
    ERROR TITI
    ERRORTITI
    ERROR TUTU" | grep -v "$exclus"
    ERROR TOTO
    ERRORTITI
    ERROR TUTU
    NB : si tu exécutes ton script avec sh tonScript, c'est sh qui exécutera le script, et non le shell défini dans le shebang.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut Problème utilisation variable dans un shell.
    al1_24 Ta solution semble être la bonne, ça marche parfaitement pour cet exemple, je n'avais pas pensé à "eval" c'est mémorisé.

    N_BaH
    Il manque quelque chose dans ta solution. En ce qui concerne le shebang tout à fait d'accord avec toi, c'est l'habitude de toucher a des sh ,mais même punition que ce soit bash ou sh.

    Très sincèrement Merci à tous deux pour vous être penché sur mon cas. J'appliquerai ses motifs cet après-midi sur mon script.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/04/2008, 12h31
  2. Utilisation de sed avec les variables dans un Shell
    Par mbole dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 05/07/2007, 17h46
  3. problème de variable dans formulaire
    Par chienlou dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 06h53
  4. [XSL] impossible d'utiliser variable dans expression XPATH
    Par pierre.zelb dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/01/2006, 07h41
  5. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 13h13

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