#1 Le 01/09/2016, à 13:10
- DonutMan75
[RESOLU] [SHELL SCRIPT] Fonction de test d'un pattern
Bonjour à tous,
j'aimerais développer une fonction en Shell Script qui test si un argument passé en entrée est dans le bon format (génère une erreur sinon).
Le format attendu est au plus 3 caractères : un éventuel "a", suivi d'un éventuel "b" puis un éventuel "c".
Quelques exemples de formats attendus : "abc", "bc", "ac", "ab" etc....
Quelques exemples de format incorrect : "aab", "ba", "aby" etc...
Ma REGEXP serait à mon avis : '^a\?b\?c\?$', qu'en pensez-vous ?
J'ai essayé d'intégrer ça dans un test qui echo une erreur si ma chaîne TEST ne correspond pas à ce pattern...
Or ça ne marche pas.....
#!/bin/sh
correspondance ()
{
case "$1" in
$2 ) return 0 ;;
* ) return 1 ;;
esac
}
TEST='bc'
if [ "! correspondance $TEST '^a\?b\?c\?$'" ] ; then echo "ERREUR" ; else echo "CHAINE OK..." ; fi
Quand j'exécute, j'obtiens "ERREUR" alors que la chaine TEST "bc" vérifie bien ma REGEXP.... Je suppute une erreur dans le if.... Avez-vous une idée ?
./debug.sh
ERREUR
Accessoirement, si vous avez un moyen plus simple de tester une regexp que d'encapsuler ça dans un case (dans une fonction), je suis aussi preneur !
Merci d'avance pour vos avis
Donut
Dernière modification par DonutMan75 (Le 02/09/2016, à 16:32)
Hors ligne
#2 Le 01/09/2016, à 13:27
- soshy
Re : [RESOLU] [SHELL SCRIPT] Fonction de test d'un pattern
Salut,
J'ai un truc comme ca qui fonctionne sur mon mac pour tester que le parametre est bien un nombre.
#!/bin/bash
regex='^[0-9]+$'
if ! [[ "$1" =~ $regex ]] ; then
echo "param1 must be a number"
exit 1;
fi
Dernière modification par soshy (Le 01/09/2016, à 13:28)
Hors ligne
#3 Le 01/09/2016, à 15:18
- pingouinux
Re : [RESOLU] [SHELL SCRIPT] Fonction de test d'un pattern
Bonjour,
Essaye
egrep -q '^a?b?c?$' <<<"$chaine" && echo "CHAINE OK..." || echo "ERREUR"
Hors ligne
#4 Le 01/09/2016, à 15:39
- DonutMan75
Re : [RESOLU] [SHELL SCRIPT] Fonction de test d'un pattern
Hello,
merci à tous, j'ai modifié mon script en deux endroits.
Tout d'abord, j'ai remplacé le case/esac initial (tiré du livre de Christophe Blaess "Shell Linux et Unix par la pratique") par un test avec grep comme suggéré par pingouinux.
Et remplacé mon test par :
if ! correspondance "$TEST" '^a?b?c?$' ; then echo "ERROR : illegal format $TEST" ; exit 1 ; fi
Je suppute que ces différences de fonctionnement viennent des shell utilisés.... C'est toujours un peu un sac de noeud pour moi.....
Merci pour vos conseils en tout cas !
Donut
Hors ligne
#5 Le 01/09/2016, à 16:00
- pingouinux
Re : [RESOLU] [SHELL SCRIPT] Fonction de test d'un pattern
Tu n'as même pas besoin de la fonction correspondance :
egrep -q '^a?b?c?$' <<<"$TEST" || { echo "ERROR : illegal format $TEST" ; exit 1; }
Hors ligne