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 :

tester sur une expression réguliere


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 62
    Par défaut tester sur une expression réguliere
    bonsoir
    j'ai un problem avec un teste, dans un script shell qui pour argument un nombre
    et je veux tester si il s'agit bien d'un nombre.
    je essayé avec :

    if [ $1 = [0-9][0-9] ];

    mais cela ne marche pas
    bon ce que je vous demande c'est une écriture général pour tester sur une expression régulier.

    merci pour votre temps.

  2. #2
    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
    Ça fonctionne avec des crochets doubles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TEST() {
    if [[ $1 = [0-9][0-9] ]]; then
       echo OK 
    else
       echo KO
    fi
    }
    TEST 4
    KO
    TEST 42
    OK
    TEST 421
    KO
    Si tu as une expression un peu plus complexe, bash peut aussi évaluer des expressions rationnelles étendues :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TEST() {
    if [[ $1 =~ ^[0-9]{2}$ ]]; then
       echo OK 
    else
       echo KO
    fi
    }
    Bon, là, ça ne présente pas de réél intérêt.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 62
    Par défaut if [[ $1 = [0-9][0-9] ]];
    merci pour la réponse
    mais j'ai une réponse d'erreur

    [[ not found

    pourtant j'ai écrit :

    if [[ $1 = [0-9][0-9] ]];

    comme vous m'avez dit.

    j'espère que il'y a une raison précise qui cause cette erreur

    merci encor pour la réponse et pour votre temps

  4. #4
    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
    Quel shell utilises-tu ? quelle version ? sous quel OS ?
    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.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Un temps j'utilisais sed

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    test=$(echo $1 | sed "s/[0-9]{2}//")
    if [ -z "$test" ]
    then
        echo "OK"
    else
        echo "KO"
    fi

  6. #6
    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
    Citation Envoyé par man bash
    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 plus bas dans Motifs génériques.
    KSH (93s+) le dit autrement, mais a le même comportement.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 62
    Par défaut tester sur une expression réguliere
    bonjour,
    merci infiniment pour votre réponse, je vais essayer encore.
    pour répondre au modérateur, j'utilise Ubuntu 9.1 et j'utilise la shell par défaut (bash).

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 62
    Par défaut tester sur une expression réguliere
    bonsoir,
    j'ai essayer avec sed ou grep çela fonction, par exemple si je veux savoir si l'argument entré est est un numérique d'un seul chiffre je peux utilisé grep

    if echo $1 | grep "^[0-9]$"
    then
    echo c un num
    fi
    mais j'ai toujours le même problème avec ce teste :
    if [[ $1 = [0-9][0-9] ]]
    then
    echo " c'est un nombre "
    fi

  9. #9
    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
    Es-tu sûr que l'interpréteur (shell) par défaut sur Ubuntu est Bash ? Il me semble avoir lu que, par défaut, l'interpréteur y est dash...
    ?

    pour vérifier, dans un terminal, tape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ $0 = bash ] && ls -l /bin/bash || { echo $0; grep $USER /etc/passwd | cut -d':' -f1,7; }
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    J'ai exécuter ton script. Ca donne bash.

    Par la commande ps ca donne aussi bash

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Es-tu sûr que l'interpréteur (shell) par défaut sur Ubuntu est Bash ? Il me semble avoir lu que, par défaut, l'interpréteur y est dash...
    ?
    Il me semble également que le shell par défaut sur Ubuntu est dash depuis une ou deux releases.

    Citation Envoyé par noooop Voir le message
    J'ai exécuter ton script. Ca donne bash.

    Par la commande ps ca donne aussi bash
    Tu n'obtiens même pas quelque chose comme

    Mais dans tous les cas, la solution à base de sed et/ou de grep est probablement plus portable.

  12. #12
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 62
    Par défaut tester sur une expression réguliere
    mercii vraiment pour votre aide
    j'ai bien profité de vos réponses

    et bien la source de problème été:
    sh monscript [argument]
    alors qu'il faut faire :
    bash monscript [argument]
    pour exécuter monscript

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    S'il s'agit bel et bien d'un script, et que le shebang est bien positionné, un chmod u+x mon_script puis un la/où/est/mon_script est peut-être plus adapté.

    Le shebang est la première ligne du script et doit ressembler à quelque chose comme :

    ou

    ou d'autres tournures encore (comme pour les sources perl, python, etc.)

  14. #14
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Un ./ suffit pour exécuter un script (après lui avoir donné les droits d'exécutions).

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Ça dépend vraiment de ton environnement.
    Si ton shell par défaut est bien /bin/bash, ok, ça peut fonctionner.
    Cependant, il est préférable de toujours préciser clairement de quel type de script il s'agit.

    Ensuite, le "./" revient à dire "la/où/est/mon_script", dans la mesure ou "." correspond au répertoire courant.

    Une autre méthode serait de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     $ PATH=${PATH}:$(pwd)
     $ mon_script

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

Discussions similaires

  1. [RegEx] Couper un mot avec une expression réguliere ?
    Par mLk92 dans le forum Langage
    Réponses: 4
    Dernier message: 24/08/2006, 09h34
  2. [RegEx] Difficultés avec une expression réguliere
    Par saint-pere dans le forum Langage
    Réponses: 10
    Dernier message: 24/06/2006, 13h47
  3. aide sur les expressions régulieres
    Par STEPH69000 dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2006, 17h54
  4. [RegEx] Aide sur une expression régulière toute simple
    Par tchoumak dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2005, 15h46
  5. Problème sur une expression régulière
    Par Verbal-Quint dans le forum Langage
    Réponses: 6
    Dernier message: 12/11/2004, 10h54

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