Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Expression régulière !

16 réponses
Avatar
Luxpopuli Open source
--e89a8f2359a9b032c104b2013443
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour,

Je m'arrache les cheveux sur une test:

Dans un script bash, j'ai besoin de contr=F4ler que la valeur taper par
l'utilisateur est comprise dans l'intervalle [-16, 16]
Et franchement, je n'arrive =E0 rien du tout.

S'il y a un pro des expressions r=E9guli=E8res, je le b=E9nis d'avance de b=
ien
vouloir voler =E0 mon secours ! ;-)

Pascal

--e89a8f2359a9b032c104b2013443
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour,<br><br>Je m&#39;arrache les cheveux sur une test: <br><br>Dans un =
script bash, j&#39;ai besoin de contr=F4ler que la valeur taper par l&#39;u=
tilisateur est comprise dans l&#39;intervalle [-16, 16]<br>Et franchement, =
je n&#39;arrive =E0 rien du tout.<br>
<br>S&#39;il y a un pro des expressions r=E9guli=E8res, je le b=E9nis d&#39=
;avance de bien vouloir voler =E0 mon secours ! ;-)<br><br>Pascal<br>

--e89a8f2359a9b032c104b2013443--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/CANi7RhT13CUpv3KKQYwbNQKjNSZDsek+ZYWX=b0enGW6dzOwcg@mail.gmail.com

10 réponses

1 2
Avatar
Bernard Schoenacker
Le Fri, 18 Nov 2011 13:09:15 +0100,
Luxpopuli Open source a écrit :

Bonjour,

Je m'arrache les cheveux sur une test:

Dans un script bash, j'ai besoin de contrôler que la valeur taper par
l'utilisateur est comprise dans l'intervalle [-16, 16]
Et franchement, je n'arrive à rien du tout.

S'il y a un pro des expressions régulières, je le bénis d'avance de
bien vouloir voler à mon secours ! ;-)

Pascal



bonjour,


j'ai trouvé un équivalent (cf lien) :

http://linuxfr.org/users/pit/journaux/script-bash-de-base


reste à adapter les script ...

en alternative je propose d'eployer des valeurs absolues ou
hexadécimales ...


slt
bernard

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Yves Rutschle
On Fri, Nov 18, 2011 at 01:09:15PM +0100, Luxpopuli Open source wrote:
Dans un script bash, j'ai besoin de contrôler que la valeur taper par
l'utilisateur est comprise dans l'intervalle [-16, 16]
Et franchement, je n'arrive à rien du tout.

S'il y a un pro des expressions régulières, je le bénis d'avance de bien
vouloir voler à mon secours ! ;-)



Utiliser des expressions régulières pour faire de
l'arithmétique, c'est un peu comme utiliser un tourne-vis
pour planter des clous (on peut y arriver, mais c'est
vraiment pas fait pour).

Regarde plutôt test(1), options -le, -ge et autres:

if [ $a -lt 16 ] && [ $a -gt -16 ]; then echo "good"; else echo "not good"; fi

Y.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Luxpopuli Open source
--90e6ba6e8ef83cc69e04b203137b
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour,

En effet, je me suis mélangé les pinceaux avec des apostrophes qui
rendaient mon code invalide et du coup je suis parti dans des trucs
incroyablement compliqués.... :-(
La réponse de Yves est parfaite.

Il y a une deuxième chose que je n'ai pas réussi à faire:

Si à la place d'une valeur numérique comprise entre -16 et 16 je répo nds
"xyz" alors le test renvoie ceci:

line 5: [: pp : nombre entier attendu comme expression

J'ai donc modifier le code ainsi:

if [[ $1 != [-0-9] ]];then
echo "Pas bon";
exit;
else
# On crontrôle que $1 soit sompris entre -16 et 16
if [ $1 -lt 16 ] && [ $1 -gt -16 ]; then
echo "Ok";
else
echo "Pas Ok";
fi
fi

La première ligne est sensée contrôler que $1 ne soit composée que d'un
signe "-" (ou d'aucun digne) et de chiffres.
Problème: si je rentre -8 le test répond "Pas bon" !

Là encore, j'ai essayé plein de syntaxes mais aucune ne fonctionne.

Merci pour votre aide

Pascal

Le 18 novembre 2011 14:19, Yves Rutschle a
écrit :

On Fri, Nov 18, 2011 at 01:09:15PM +0100, Luxpopuli Open source wrote:
> Dans un script bash, j'ai besoin de contrôler que la valeur taper par
> l'utilisateur est comprise dans l'intervalle [-16, 16]
> Et franchement, je n'arrive à rien du tout.
>
> S'il y a un pro des expressions régulières, je le bénis d'avance de bien
> vouloir voler à mon secours ! ;-)

Utiliser des expressions régulières pour faire de
l'arithmétique, c'est un peu comme utiliser un tourne-vis
pour planter des clous (on peut y arriver, mais c'est
vraiment pas fait pour).

Regarde plutôt test(1), options -le, -ge et autres:

if [ $a -lt 16 ] && [ $a -gt -16 ]; then echo "good"; else echo "not
good"; fi

Y.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/





--90e6ba6e8ef83cc69e04b203137b
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour,<br><br>En effet, je me suis mélangé les pinceaux avec des apos trophes qui rendaient mon code invalide et du coup je suis parti dans des t rucs incroyablement compliqués.... :-(<br>La réponse de Yves est parfai te.<br>
<br>Il y a une deuxième chose que je n&#39;ai pas réussi à faire: <br ><br>Si à la place d&#39;une valeur numérique comprise entre -16 et 16 je réponds &quot;xyz&quot; alors le test renvoie ceci:<br><br>line 5: [: pp : nombre entier attendu comme expression<br>
<br>J&#39;ai donc modifier le code ainsi:<br><br>if [[ $1 != [-0-9] ]];th en<br>   echo &quot;Pas bon&quot;;<br>   exit;<br>else<br>   # On crontrôle que $1 soit sompris entre -16 et 16<br>   if [ $1 -lt 16 ] &amp;&amp; [ $1 -gt -16 ]; then<br>
      echo &quot;Ok&quot;;<br>   else <br>      ech o &quot;Pas Ok&quot;;<br>   fi<br>fi<br><br>La première ligne est sen sée contrôler que $1 ne soit composée que d&#39;un signe &quot;-&quot ; (ou d&#39;aucun digne) et de chiffres.<br>
Problème: si je rentre -8 le test répond &quot;Pas bon&quot; !<br><br>L à encore, j&#39;ai essayé plein de syntaxes mais aucune ne fonctionne.< br><br>Merci pour votre aide<br><br>Pascal<br><br><div class="gmail_quote ">Le 18 novembre 2011 14:19, Yves Rutschle <span dir="ltr">&lt;<a href= "mailto:"></a>&gt ;</span> a écrit :<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1p x #ccc solid;padding-left:1ex;"><div class="im">On Fri, Nov 18, 2011 at 0 1:09:15PM +0100, Luxpopuli Open source wrote:<br>
&gt; Dans un script bash, j&#39;ai besoin de contrôler que la valeur tape r par<br>
&gt; l&#39;utilisateur est comprise dans l&#39;intervalle [-16, 16]<br>
&gt; Et franchement, je n&#39;arrive à rien du tout.<br>
&gt;<br>
&gt; S&#39;il y a un pro des expressions régulières, je le bénis d&#3 9;avance de bien<br>
&gt; vouloir voler à mon secours ! ;-)<br>
<br>
</div>Utiliser des expressions régulières pour faire de<br>
l&#39;arithmétique, c&#39;est un peu comme utiliser un tourne-vis<br>
pour planter des clous (on peut y arriver, mais c&#39;est<br>
vraiment pas fait pour).<br>
<br>
Regarde plutôt test(1), options -le, -ge et autres:<br>
<br>
if [ $a -lt 16 ] &amp;&amp; [ $a -gt -16 ]; then echo &quot;good&quot;; els e echo &quot;not good&quot;; fi<br>
<br>
Y.<br>
<div class="im"><br>
--<br>
Lisez la FAQ de la liste avant de poser une question :<br>
<a href="http://wiki.debian.org/fr/FrenchLists" target="_blank">http:// wiki.debian.org/fr/FrenchLists</a><br>
<br>
Pour vous DESABONNER, envoyez un message avec comme objet &quot;unsubscribe &quot;<br>
vers <a href="mailto:">debian- </a><br>
En cas de soucis, contactez EN ANGLAIS <a href="mailto: ebian.org"></a><br>
</div>Archive: <a href="http://lists.debian.org/ yves.com" target="_blank">http://lists.debian.org/ aryves.com</a><br>
<br>
</blockquote></div><br>

--90e6ba6e8ef83cc69e04b203137b--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/CANi7RhSy5SMa6PYNbUyr6=qMfPxagqtKXKVh01oExig+
Avatar
Jean-Yves F. Barbier
On Fri, 18 Nov 2011 14:19:50 +0100
Yves Rutschle wrote:

if [ $a -lt 16 ] && [ $a -gt -16 ]; then echo "good"; else echo "not good "; fi



Heu, ça ne serait pas plutôt: if [ $a -lt 17 ] && [ $a -gt -15 ]; par hasard?

--
Dibble's First Law of Sociology:
Some do, some don't.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Nicolas Bercher
Je ne suis pas certain que ceci soit correct:

  if [[ $1 != [-0-9] ]];then

Je ne suis pas un expert, mais je ne saurais dire ce que cela signifie puisque [-0-9] semble être un motif que bash va tenter de faire correspondre aux fichiers présents dans "./". A défaut de trouver quel que chose au niveau de bash, ceci semble robuste:

  if ! echo "${1}" | grep "^[+-]?[0-9]+$"; then

ou plus implement cela (après la l ecture du man de bash):

  if [[ ! $1 =~ ^[-+]?[0-9]+$ ]]; then


Ces deux solutions supportent le signe "+".


Nicolas


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Bernard Schoenacker
Le Fri, 18 Nov 2011 15:50:23 +0000 (GMT),
Nicolas Bercher a écrit :

Je ne suis pas certain que ceci soit correct:

  if [[ $1 != [-0-9] ]];then

Je ne suis pas un expert, mais je ne saurais dire ce que cela
signifie puisque [-0-9] semble être un motif que bash va tenter de
faire correspondre aux fichiers présents dans "./". A défaut de
trouver quelque chose au niveau de bash, ceci semble robuste:

  if ! echo "${1}" | grep "^[+-]?[0-9]+$"; then

ou plus implement cela (après la lecture du man de bash):

  if [[ ! $1 =~ ^[-+]?[0-9]+$ ]]; then


Ces deux solutions supportent le signe "+".


Nicolas




bonjour,

pourquoi ne pas employer la fonction sequence (seq) ?

http://www.tldp.org/LDP/abs/html/

slt
bernard

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Nicolas Bercher
Je rectifie:

[-0-9] semble être un motif que bash va tenter de fai re correspondre aux
fichiers présents dans "./".



A priori non, pas dans le contexte d'une "commande composée" telle que [[ ]].
De plus , la page man est très claire à ce sujet: "Le découpage en mots et le développement des chemins ne sont pas effectués sur les mots entre [[ et ]]".

Nicolas


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Yves Rutschle
On Fri, Nov 18, 2011 at 03:43:31PM +0100, Jean-Yves F. Barbier wrote:
> if [ $a -lt 16 ] && [ $a -gt -16 ]; then echo "good"; else echo "not good"; fi

Heu, ça ne serait pas plutôt: if [ $a -lt 17 ] && [ $a -gt -15 ]; par hasard?



J'ai raté l'inclusion effectivement. Soit ta solution, soit
-le et -ge qui comparent "less or equal": solution à choisir
selon ce qui est plus logique dans le contexte.

Y.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Serge SMEESTERS
J'ai toujours ça sous la main :

Guide avancé d'écriture des scripts Bash
→ http://abs.traduc.org/abs-fr/


À+,
Serge S.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Jean-Yves F. Barbier
On Fri, 18 Nov 2011 18:25:55 +0100
Yves Rutschle wrote:

On Fri, Nov 18, 2011 at 03:43:31PM +0100, Jean-Yves F. Barbier wrote:
> > if [ $a -lt 16 ] && [ $a -gt -16 ]; then echo "good"; else echo "not good"; fi
>
> Heu, ça ne serait pas plutôt: if [ $a -lt 17 ] && [ $a -gt -1 5 ]; par hasard?

J'ai raté l'inclusion effectivement. Soit ta solution, soit
-le et -ge qui comparent "less or equal": solution à choisir
selon ce qui est plus logique dans le contexte.



Non, simplement parce que > ou < prend bcp moins de cycles CPU que >= ou =<

Dans le cas présent c'est trivial, dans le cas d'une fonction DB testa nt une
multitude de cas ou d'un PGM temps réel ou bien tournant sur une carte
embarquée c'est très important; et c'est une bonne habitude à   prendre.

--
A man's house is his hassle.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
1 2