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 :

Test d'expression avec bash


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 161
    Points : 78
    Points
    78
    Par défaut Test d'expression avec bash
    Bonjour,

    Je souhaitrais tester dans une boucle for si ma ligne est un commentaire ou non.

    Je pense faire comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for var in `cat $fichier`
    do
      if [ $var = `echo $var | grep ^#` ] ; then
        echo "COMMENTAIRE"
      else
        echo "PAS COMMENTAIRE"
      fi
    done
    ca marche mais bash renvoie bash: [: toto : opérateur unaire attendu
    pourquoi ??

    Merci de votre aide. D'autres solutions peuvent être débatus

    Fluxy__

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Salut,

    Code Fluxy : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for var in `cat $fichier`
    do
      if [ $var = `echo $var | grep ^#` ] ; then
        echo "COMMENTAIRE"
      else
        echo "PAS COMMENTAIRE"
      fi
    done

    C'est bizarre ton $var = `echo $var | grep ^#` là. Il me semble que ça ne marche pas comme ça, en tout cas le '=' me parait douteux.

    EDIT :

    Test avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for var in `cat $fichier`
    do
      if [ "$var" = "`echo $var | grep ^#`" ] ; then
        echo "COMMENTAIRE"
      else
        echo "PAS COMMENTAIRE"
      fi
    done

  3. #3
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Citation Envoyé par toto019
    en tout cas le '=' me parait douteux
    Le '=' est douteux mais tu l'utilises

    Il manquait seulement les doubles quotes "$var" et "blabla"

    ++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Olivier Regnier
    Le '=' est douteux mais tu l'utilises
    C'est la veillesse
    J'ai confondu avec Perl

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    le = est parfaitement valide en shell, il ne l'était pas dans la préhistoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while read var
    do
      if [[ "$var" = "$(echo $var | grep '^#')" ]] ; then
        echo "COMMENTAIRE"
      else
        echo "PAS COMMENTAIRE"
      fi
    done < $fichier
    ecrit à la mode du XXI ene siècle.

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Sous bash, il y a plus rapide en n'appelant pas de scripts externes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ "${var/^#/}" != "$var" ] ; then
       echo "commentaire: $var"
    fi
    Le principe est de virer, par subtitution, le pattern qui t'interresse. S'il est trouvé, alors il disparait du résultat. Et du coup le résultat n'est plus égal à la variable initiale.
    C'est certes tordu, mais cela m'avait permis de gagner beaucoup de temps sur un de mes scripts.

Discussions similaires

  1. Test sur formulaire avec liste des erreurs
    Par Nicos77 dans le forum Langage
    Réponses: 37
    Dernier message: 17/11/2005, 11h22
  2. Test d'expression régulière, besoin d'aide
    Par RedShift2 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/02/2005, 17h04
  3. Comptage avec bash
    Par ALT dans le forum Linux
    Réponses: 8
    Dernier message: 20/10/2004, 12h02
  4. Test PostgreSQL v8 avec NAMEDATALEN = 128 caracteres
    Par hondjack dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/10/2004, 01h32
  5. Test d'éxistence avec un RecordSet
    Par matt63 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 13h23

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