Expression régulière !

Le
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ô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 b=
ien
vouloir voler à 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ôler que la valeur taper par l&#39;u=
tilisateur est comprise dans l&#39;intervalle [-16, 16]<br>Et franchement, =
je n&#39;arrive à rien du tout.<br>
<br>S&#39;il y a un pro des expressions régulières, je le bénis d&#39=
;avance de bien vouloir voler à 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°enGW6dzOwcg@mail.gmail.com
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bernard Schoenacker
Le #23977711
Le Fri, 18 Nov 2011 13:09:15 +0100,
Luxpopuli Open source
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/
Yves Rutschle
Le #23977891
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/
Luxpopuli Open source
Le #23978001
--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 é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>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;; Problème: si je rentre -8 le test répond &quot;Pas bon&quot; ! &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>
<br>
Pour vous DESABONNER, envoyez un message avec comme objet &quot;unsubscribe &quot;<br>
vers En cas de soucis, contactez EN ANGLAIS <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+
Jean-Yves F. Barbier
Le #23978091
On Fri, 18 Nov 2011 14:19:50 +0100
Yves Rutschle
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/
Nicolas Bercher
Le #23978341
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/
Bernard Schoenacker
Le #23978401
Le Fri, 18 Nov 2011 15:50:23 +0000 (GMT),
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 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/
Nicolas Bercher
Le #23978541
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/
Yves Rutschle
Le #23978761
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/
Serge SMEESTERS
Le #23978811
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/
Jean-Yves F. Barbier
Le #23978921
On Fri, 18 Nov 2011 18:25:55 +0100
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 -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/
Publicité
Poster une réponse
Anonyme