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'arrache les cheveux sur une test: <br><br>Dans un =
script bash, j'ai besoin de contrôler que la valeur taper par l'u=
tilisateur est comprise dans l'intervalle [-16, 16]<br>Et franchement, =
je n'arrive à rien du tout.<br>
<br>S'il y a un pro des expressions régulières, je le bénis d'=
;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
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'arrache les cheveux sur une test: <br><br>Dans un =
script bash, j'ai besoin de contrôler que la valeur taper par l'u=
tilisateur est comprise dans l'intervalle [-16, 16]<br>Et franchement, =
je n'arrive à rien du tout.<br>
<br>S'il y a un pro des expressions régulières, je le bénis d'=
;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
Luxpopuli Open source
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/
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/
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 :
--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'ai pas réussi à faire: <br ><br>Si à la place d'une valeur numérique comprise entre -16 et 16 je réponds "xyz" alors le test renvoie ceci:<br><br>line 5: [: pp : nombre entier attendu comme expression<br>
<br>J'ai donc modifier le code ainsi:<br><br>if [[ $1 != [-0-9] ]];th en<br> echo "Pas bon";<br> exit;<br>else<br> # On crontrôle que $1 soit sompris entre -16 et 16<br> if [ $1 -lt 16 ] && [ $1 -gt -16 ]; then<br>
echo "Ok"; Problème: si je rentre -8 le test répond "Pas bon" ! > Dans un script bash, j'ai besoin de contrôler que la valeur tape r par<br>
> l'utilisateur est comprise dans l'intervalle [-16, 16]<br>
> Et franchement, je n'arrive à rien du tout.<br>
><br>
> S'il y a un pro des expressions régulières, je le bénis d 9;avance de bien<br>
> vouloir voler à mon secours ! ;-)<br>
<br>
</div>Utiliser des expressions régulières pour faire de<br>
l'arithmétique, c'est un peu comme utiliser un tourne-vis<br>
pour planter des clous (on peut y arriver, mais c'est<br>
vraiment pas fait pour).<br>
<br>
Regarde plutôt test(1), options -le, -ge et autres:<br>
<br>
if [ $a -lt 16 ] && [ $a -gt -16 ]; then echo "good"; els e echo "not good"; 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 "unsubscribe "<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+
Yves Rutschle
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/
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/
Nicolas Bercher
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/
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/
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/
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/
Yves Rutschle
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/