Se connecter avec
S'enregistrer | Connectez-vous

Comparer chaines de caractères avec expressions régulières

Dernière réponse : dans Programmation

Bonjour,

Je cherche à comparer deux chaines de caractères dans un if, en shell.

La première est récupérée de l'entrée standard grâce à la commande read sans arguments (pour pouvoir contenir plusieurs mots). Elle correspond donc à la valeur de la variable REPLY ("$REPLY")
La deuxième serait n'importe quelle phrase contenant "OK" en minuscules ou majuscules (OK, Ok, oK, ok). Je cherche donc à faire ça avec les expressions régulières.
Comme ça tout va bien :
  1. echo -n "Entrer une phrase contenant ok: "
  2. read
  3. if [ "$REPLY" = ok ]; then
  4. echo -e "c'est bon"
  5. else
  6. echo -e "pas bon"
  7. fi


Mais avec les expressions régulières, j'ai eu beau essayé...
  1. if [ "$REPLY" = *(o|O)(k|K)* ]
  2. if [ "$REPLY" = expr *(o|O)(k|K)* ]
  3. if [ "$REPLY" = $(expr *(o|O)(k|K)*) ]
  4. if [ "$REPLY" = expr *(o|O)(k|K)* ]
  5. if [ "$REPLY" = "\*(O\|o)(K|k)\*" ]
  6. if [ "$REPLY" = $(expr \*(O\|o)(K|k)\*) ]


Je ne trouve pas... Si quelqu'un pouvait m'expliquer ce serait sympa :D 
Lassé par la pub ? Créez un compte

bonjour,
je ne pense pas que bash integre les expressions régulières (ou alors j'ai souvent perdu du temps :) )
pour les simuler, tu peux utiliser grep:
  1. if echo $REPLY | grep expression > /dev/null
  2. then
  3. echo "c'est bon"
  4. else
  5. echo "c'est pas bon"
  6. fi


EDIT: j'ai supposé que tu parlais du bash

heuu ..

echo -n "donnée ? :"
read donnee
if [ "$donnee" = "ok" ]
then
[...]
else
[...]
fi

pour ton test minuscule/majuscule, tu fais juste 1 tr et tu teste sur "OK"
/!\ : Les cotes et cotes inversées...

En rouge: cote inversée. (touche alt-gr 7)
En bleu : cote normale. (touche 4)

don=`echo $donnee | tr '[a-z]' '[A-Z]'`
ça marche bien sous unix ...
Lassé par la pub ? Créez un compte
Tom's guide dans le monde