bash et case esac

Le
Kevin Denis
Bonjour,

j'ai une variable texte contenant une ligne avec des espaces et différents
caractères.

J'ai besoin de parser cette ligne car différentes actions doivent être
prises selon le début de celle ci.

J'ai choisi d'utiliser case/esac:
case $LINE in
aaa*)
do_aaa
;;
bbb*)
do_bbb
;;
esac

Mais j'ai un problème pour différencier:
aaa blablabla
aaaaa blablabla

Et mes tentatives à base de:
aaa .*)
do_aaa
;;
ne fonctionnent pas.

Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.

Merci
--
Kevin
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #23584471
Kevin Denis , dans le message
aaa .*)



Pourquoi mets-tu un point ?

Ceci j'utilise case/esac mais s'il y a mieux, je prends.



Le problème, ce n'est pas case, c'est bash. Pour des tâches un tant soit peu
complexes, il vaut mieux utiliser un vrai langage.
Bruno Tréguier
Le #23584951
Le 20/07/2011 11:46, Kevin Denis a écrit :
Bonjour,

j'ai une variable texte contenant une ligne avec des espaces et différents
caractères.

J'ai besoin de parser cette ligne car différentes actions doivent être
prises selon le début de celle ci.

J'ai choisi d'utiliser case/esac:
case $LINE in
aaa*)
do_aaa
;;
bbb*)
do_bbb
;;
esac

Mais j'ai un problème pour différencier:
aaa blablabla
aaaaa blablabla

Et mes tentatives à base de:
aaa .*)
do_aaa
;;
ne fonctionnent pas.

Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.



Bonjour Kévin,

Si tous les mots de votre ligne sont séparés par des éléments de $IFS
(comme l'espace) et que c'est le premier mot qui détermine le
traitement, vous pouvez toujours contourner le problème en utilisant un
artifice du genre:

set -- $LINE # decompose $LINE dans les parametres positionnels $1 et
suivants

case $1 in
aaa)
do_aaa
;;
etc.

--
Bruno Tréguier
Philippe Naudin
Le #23586441
Le mer 20 jui 2011 14:43:43 CEST, Bruno Tréguier a écrit:

Le 20/07/2011 11:46, Kevin Denis a écrit :
> Bonjour,
>
> j'ai une variable texte contenant une ligne avec des espaces et diffé rents
> caractères.
>
> J'ai besoin de parser cette ligne car différentes actions doivent ê tre
> prises selon le début de celle ci.
>
> J'ai choisi d'utiliser case/esac:
> case $LINE in
> aaa*)
> do_aaa
> ;;
> bbb*)
> do_bbb
> ;;
> esac
>
> Mais j'ai un problème pour différencier:
> aaa blablabla
> aaaaa blablabla
>
> Et mes tentatives à base de:
> aaa .*)
> do_aaa
> ;;
> ne fonctionnent pas.
>
> Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.

Bonjour Kévin,

Si tous les mots de votre ligne sont séparés par des éléments de $IFS
(comme l'espace) et que c'est le premier mot qui détermine le
traitement, vous pouvez toujours contourner le problème en utilisant un
artifice du genre:

set -- $LINE # decompose $LINE dans les parametres positionnels $1 et
suivants

case $1 in
aaa)
do_aaa
;;
etc.




Et aussi :
for LINE in "aaa blablabla" "aaaaa blablabla" ; do
case "$LINE" in
aaa *)
echo $LINE : 3a
;;
aaa*)
echo $LINE : 5a
;;
esac
done

--
Philippe
Publicité
Poster une réponse
Anonyme