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 :

Bash et regex


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut Bash et regex
    Bonjour,

    Je suis en train de créer un petit programme et j'ai besoin d'utiliser un contrôle de saisie, mais n'étant pas un expert en regex, j'aimerai un peu d'aide

    Donc je vous explique pour chacune ce que je veux comme résultat et ce que j'ai fait après plusieurs recherches sur le net :

    Numéro 1
    Je veux que la variable ACTION puisse uniquement prendre des valeurs numériques entre 1 et 5. J'ai fait :
    Je suppose après quelques tests que ça c'est ok.

    Numéro 2
    Une année comprise entre 1900 et cette année.
    Quand je dit année, c'est uniquement des chiffres sans virgule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    export YEAR=`date +%Y`
    [[ "$ANNEE" =~ "^[1-2][0|9][0-9][0-9]$" ]] && [[ "$ANNEE" -le "$YEAR" ]]
    Je suppose après quelques tests que ça c'est ok.

    Numéro 3
    Un nombre entier entre 1 et 99
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[ "$NOMBRE" =~ "^[1-9]?[0-9]$" ]]
    Je suppose après quelques tests que ça c'est ok.

    Numéro 4
    Un nombre qui contient 0, 1, ou 2 décimales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[ "$PRIX" =~ "^[0-9]*\.?[0-9][0-9]$" ]]
    La j'ai un souci, si je met 04 par exemple il me prend la saisie. Moi je veux uniquement qu'il prenne 0 si le nombre est 0.99 par exemple.

    Numéro 5
    J'aimerai que l'affirmation soit testée pour [jpg] sans tenir compte de la casse au lieu de faire un if avec deux conditions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ ! -e "$IMAGES/IMG_$AFFICHE.jpg" ] && [ ! -e "$IMAGES/IMG_$AFFICHE.JPG" ]
    La je sais pas comment faire.

    Numéro 6
    Une note avec 0, 1 ou 2 décimales (de 5 en 5) comprise de 0 à 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[ "$NOTE" =~ "^[0-5]\.?[0-9]$" ]] && [ $(echo "5.1 - $NOTE" | bc | tr -d .) -gt 0 ]
    Si je met un chiffre sans décimal notamment il prend pas la saisie.

    Merci pour votre aide

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Pour le 3 le '?' n'est pas au bon endroit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $ nombre=01;if [[ "$nombre" =~ ^[1-9][0-9]?$ ]]; then echo correspond; fi
    $ nombre=1;if [[ "$nombre" =~ ^[1-9][0-9]?$ ]]; then echo correspond; fi
    correspond
    $ nombre=0;if [[ "$nombre" =~ ^[1-9][0-9]?$ ]]; then echo correspond; fi
    $ nombre=10;if [[ "$nombre" =~ ^[1-9][0-9]?$ ]]; then echo correspond; fi
    correspond
    $ nombre=99;if [[ "$nombre" =~ ^[1-9][0-9]?$ ]]; then echo correspond; fi
    correspond
    $ nombre=100;if [[ "$nombre" =~ ^[1-9][0-9]?$ ]]; then echo correspond; fi

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Ben pourtant dans les exemples que tu donne c'est bon...
    Et pour les autres ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Citation Envoyé par lokomass Voir le message
    Ben pourtant dans les exemples que tu donnes c'est bon...
    Oui c'est bon parce que ce n'est pas ce que tu as écrit. J'ai remis le '?' au bon endroit dans la regex.

    On commence forcément par un chiffre de 1 à 9. Le second chiffre est optionnel ( ? ) et de 0 à 9

  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
    Bonjour,

    Je suppose après quelques tests que ça c'est ok.
    quels tests ?
    les regex ne doivent pas être entre guillemets (comme le montre flodelarab) !
    il est d'ailleurs recommandé de les mettre dans une variable, et d'utiliser cette variable (sans guillemets) dans un test avancé.

    pour le 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    annee=1099
    year=$(date +%Y)
    regex="^(19|20)[0-9][0-9]$"
    if [[ $annee =~ $regex ]] && [ $annee -le $year ]; then echo ok; else echo ko; fi
    NB: les variables ne doivent pas être tout en majuscules.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Commande grep/sed dans script bash avec regex
    Par 1r2R1 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 02/04/2014, 16h49
  2. bash - test regex
    Par plnew dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 20/02/2012, 18h28
  3. Regex en bash pour vérifier une extension
    Par Aeren dans le forum Linux
    Réponses: 4
    Dernier message: 03/05/2011, 22h36
  4. Réponses: 1
    Dernier message: 24/02/2011, 14h41
  5. RegEx dans un bash
    Par sdblepas dans le forum Linux
    Réponses: 12
    Dernier message: 05/05/2010, 09h21

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