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 :

if et presence de caractere


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Par défaut if et presence de caractere
    Bonjour

    Désolée de deranger pour un problème qui je suis sure est basique mais je suis débutante en shell et là j'y arrive vraiment pas après avoir lu plusieurs tutos, donc merci pour votre aide !

    Voilà je cherche à lire un fichier ligne à ligne (ça j'y arrive) et si la ligne ne contient pas les caractères # et * j'agis dessus. Seulement voilà je n'arrive pas à faire ce test.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while read ligne 
    do   
       if echo $ligne | grep -v '#' | grep -v '*'
       then
    		mesCommandes (qui fonctionnent elles ! ;) )
       fi
    done < monFichier
    J'ai aussi essayé avec une expression conditionnelle [[ ]] mais ça ne marche pas. Actuellement il semble passer dans le if pas à chaque fois mais plus de fois que prévu, je ne comprends pas ce qu'il fait.

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour

    if doit etre suivi d'une expression conditionnelle. Ici, tu as plusieurs problemes :
    tu n'executes pas la commande, et tu ne testes pas la valeur de l'expression.

    Sauf dans le cadre d'un exercice, le while ne sert a priori a rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep -v ['#''*'] fichier
    Affiche toutes les lignes ne contenant ni # ni *
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Bonjour,

    Il manque quel type de test tu réalises

    Essais avec ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while read ligne 
    do   
       if [[ -n $(echo $ligne | grep -v '\#' | grep -v '\*') ]]
       then
    		mesCommandes (qui fonctionnent elles ! ;) )
       fi
    done < monFichier

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    Par défaut
    Code BASH & KSH93 : Sélectionner tout - Visualiser dans une fenêtre à part
    while read line; do [[ ! $line =~ (#|'*') ]] && echo "$line"; done <monFichier
    fi de grep !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé

    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Par défaut
    Merci lilian h

    ça fonctionne parfaitement merci

    Juste pour vérifier que j'ai compris les [[ ]] après le if indiquent que c'est une expression conditionnelle.
    le $(maCommande) indiquent la commande qui doit être évaluée ?
    et le -n aussi ?

  6. #6
    Membre éclairé

    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Par défaut
    Merci gangsoleil mais en fait je dois faire un certain nombre de traitement sur ces lignes donc je ne peux pas juste les afficher.

    Je crois que tu vas un peu vite pour moi N Bah, j'ai essayé pour voir si je comprenais mais je ne comprends pas et d'ailleurs je ne parviens pas au résultat que je veux. Pourtant il me semblait que [[ ! $line =~ (#|'*') ]] c'est le même test que [[ -n $(echo $ligne | grep -v '\#' | grep -v '\*') ]] sans grep ?

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    Par défaut
    je ne parviens pas au résultat que je veux.
    comme je l'ai précisé, cela fonctionne avec bash et ksh93.
    quel shell utilises-tu ?
    il me semblait que [[ ! $line =~ (#|'*') ]] c'est le même test que [[ -n $(echo $ligne | grep -v '\#' | grep -v '\*') ]] sans grep
    en effet, cela teste la variable selon qu'elle correspond, ou ne correspond pas (comme ici) à une expression régulière.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre éclairé

    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Par défaut
    J'utilise le shell bash.

    J'ai juste échangé les expressions conditionnelles du if, pourtant cela ne me renvoie pas le même résultat.

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

Discussions similaires

  1. [XL-2007] Verifier la presence caractere alphabetique
    Par guigui69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/01/2014, 18h32
  2. verifier la presence de caracteres speciaux
    Par makohsarah dans le forum Général Java
    Réponses: 4
    Dernier message: 16/05/2008, 15h50
  3. [Regex] Verifier presence de caracteres alphanumeriques seuls
    Par Arnard dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 03/11/2006, 09h12
  4. Réponses: 2
    Dernier message: 29/05/2002, 20h43
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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