Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/09/2016, à 14: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 smile


Donut

Dernière modification par DonutMan75 (Le 02/09/2016, à 17:32)

Hors ligne

#2 Le 01/09/2016, à 14: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, à 14:28)

Hors ligne

#3 Le 01/09/2016, à 16: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, à 16: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, à 17: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