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

Linux Discussion :

[bash] case et regexp


Sujet :

Linux

  1. #1
    Membre actif Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Points : 234
    Points
    234
    Par défaut [bash] case et regexp
    Bonjour,

    Je tente de résoudre les exos du tutoriel "IntroProgBash"

    Dans celui sur case (page 56), il s'agit de déterminer si le premier caractère est un chiffre, une majuscule ou une minuscule.

    J'en suis là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    shopt -s extglob
     
    tampe=$(echo $1 | cut -c1 )
    echo $tampe
    case $tampe in 
     [0-9] ) echo l argument commence par 1 chiffre ;;
     [a-z] ) echo l argument commence par 1 minuscule ;;
     [A-Z] ) echo l argument commence par 1 majuscule ;;
     * ) echo argument commence par $tampe ;;
    esac
    Mais bONjour ou Bonjour affichent toujours "..1 minuscule".

    Par contre si je code avec des if:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    echo $1 | grep ^[a-z]  
     
    if [ $? = 0 ]
    then
       echo "$1 commence par une minuscule"
    fi
     
     
    echo $1 | grep ^[A-Z]  
     
    if [ $? = 0 ]
    then
       echo "$1 commence par une majuscule"
    fi
    ça fonctionne.

    Je suis en Fedora 9 2.6.27.25

    Merci pour votre aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 462
    Points
    19 462
    Par défaut
    Pour moi, ça marche ainsi :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    tampe=${1:0:1} # bash ne prend en compte qu'un (1) caractère depuis le début (0) du paramètre ($1), mais ce n'est pas le sujet.
    echo $tampe
    case $tampe in
     [0-9] ) echo "l'argument commence par 1 chiffre" ;;
     [[:lower:]] ) echo "l'argument commence par 1 minuscule" ;;
     [[:upper:]] ) echo "l'argument commence par 1 majuscule" ;;
     * ) echo "l'argument commence par $tampe" ;;
    esac
    En fait, case n'accepte pas les regex, seulement ce qui correspond au Développement des chemins

  3. #3
    Membre actif Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Points : 234
    Points
    234
    Par défaut
    Merci beaucoup N_Bah,

    ça marche,

    par contre faut que je retrouve cette syntaxe " ${1:0:1} "
    c'est trop puissant...

    P.S.: Le manuel est de Eric Sanchis

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Jean_Benoit Voir le message
    Bonjour,

    Je tente de résoudre les exos du tutoriel "IntroProgBash"

    Dans celui sur case (page 56), il s'agit de déterminer si le premier caractère est un chiffre, une majuscule ou une minuscule.

    J'en suis là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    shopt -s extglob
     
    tampe=$(echo $1 | cut -c1 )
    echo $tampe
    case $tampe in 
     [0-9] ) echo l argument commence par 1 chiffre ;;
     [a-z] ) echo l argument commence par 1 minuscule ;;
     [A-Z] ) echo l argument commence par 1 majuscule ;;
     * ) echo argument commence par $tampe ;;
    esac
    Mais bONjour ou Bonjour affichent toujours "..1 minuscule".
    Je suis en Fedora 9 2.6.27.25

    Merci pour votre aide
    Etrange. Ton script me semblait bon. Je l'ai donc tapé à l'identique et il se comporte de la même façon avec moi (bon, c'est le contraire qui aurait été étonnant). Toutefois, si on inverse le cas [a-z] et [A-Z], alors plus de problème. Il marche dans tous les cas. Et ça, je pige pas. On dirait que le cas [A-Z] est accepté par la ligne [a-z]..

  5. #5
    Membre actif Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Points : 234
    Points
    234
    Par défaut
    Bonjour Sv@R

    Perplexité, perplexité, je préfère l'avoir trouvé ici que chez un client..

    En tout cas j'ai trouvé la syntaxe du ${1:0:1} sur ton cours sur le shell sur ton site...

    Merci pour ton aide

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

Discussions similaires

  1. Regexp sur chaine de caracteres : comment récupérer les valeurs ? (Bash 2.x)
    Par joserwan dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 08/06/2009, 21h35
  2. [BASH] modèle pour CASE
    Par Baal dans le forum Linux
    Réponses: 5
    Dernier message: 11/02/2009, 03h17
  3. en bash introduire un while dans un case
    Par astroflo dans le forum Linux
    Réponses: 0
    Dernier message: 25/11/2008, 08h22
  4. [Bash] Comparaison ligne regexp
    Par Babybel54 dans le forum Linux
    Réponses: 8
    Dernier message: 19/08/2008, 14h50
  5. [Bash script] comment matcher avec un regexp
    Par beloc dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 24/08/2007, 13h33

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