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

[Q] test d'un nombre

11 réponses
Avatar
Nicolas.MICHEL
Bonjour

Dans un script shell, je demande d'entrer un chiffre de 0 à 59.
Comment vérifier son résultat ?

J'ai fait le truc qui suit, mais j'ai l'impression d'écrire fort mal :

if echo $result | grep -E "^[0-9]*$"
then
if expr $result \< 60
then
echo "coucou $result"
else
echo "que neni"
fi
else
echo "que neni"
fi

Merci d'avance :)
--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas

10 réponses

1 2
Avatar
Laurent Wacrenier
Nicolas MICHEL écrit:
Dans un script shell, je demande d'entrer un chiffre de 0 à 59.
Comment vérifier son résultat ?


"59" est un nombre sur deux chiffres.

deux moyens simples :

case "$result" in
[0-9]|[1-5][0-9]*) echo ok;;
*) echo ko;;
esac

ou

test $result -le 59 -a $result -ge 0 && echo ok

Le premier évite habilement le lourd "if echo | grep"

Avatar
Laurent Wacrenier
Nicolas MICHEL écrit:
Dans un script shell, je demande d'entrer un chiffre de 0 à 59.
Comment vérifier son résultat ?


"59" est un nombre sur deux chiffres.

deux moyens simples :

case "$result" in
[0-9]|[1-5][0-9]) echo ok;;
*) echo ko;;
esac

ou

test $result -le 59 -a $result -ge 0 && echo ok

Le premier évite habilement le lourd "if echo | grep"

Avatar
Nicolas.MICHEL
Laurent Wacrenier wrote:

Nicolas MICHEL écrit:
Dans un script shell, je demande d'entrer un chiffre de 0 à 59.
Comment vérifier son résultat ?


"59" est un nombre sur deux chiffres.

deux moyens simples :

case "$result" in
[0-9]|[1-5][0-9]) echo ok;;
*) echo ko;;
esac

ou

test $result -le 59 -a $result -ge 0 && echo ok

Le premier évite habilement le lourd "if echo | grep"


Merci Laurent ! :-)


--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas


Avatar
Stephane Chazelas
2005-04-13, 14:51(+00), Laurent Wacrenier:
Nicolas MICHEL écrit:
Dans un script shell, je demande d'entrer un chiffre de 0 à 59.
Comment vérifier son résultat ?


"59" est un nombre sur deux chiffres.

deux moyens simples :

case "$result" in
[0-9]|[1-5][0-9]) echo ok;;
*) echo ko;;
esac

ou

test $result -le 59 -a $result -ge 0 && echo ok

Le premier évite habilement le lourd "if echo | grep"


Le deuxieme ne marche que si $result est un nombre valide.
Sinon, il peut y avoir des messages d'erreurs ou des resultats
inattendus suivant les shells (par exemple si $result vaut
"RANDOM" ou "SECONDS" ou "(" sans parler de "*", "" ou "a = a
-a 3" vu que les quotes ont ete oubliees...)

Le premier ne marche plus si "001", "0x12" doivent etre
considerés comme valides ou 09 comme invalide (mauvais octal)

Avec un shell POSIX:

if
case "$result" in
*[!0-9a-fA-FxX]*|0[xX]|0[xX]*[xX]*|"") false;;
0x*) [ "$(($result))" -le 59 ];;
0*[!0-7]*|*[!0-9]*) false;;
*) [ "$(($result))" -le 59 ];;
esac
then
echo ok
else
echo ko
fi

--
Stéphane


Avatar
FAb
Stephane Chazelas writes:

2005-04-13, 14:51(+00), Laurent Wacrenier:
Nicolas MICHEL écrit:
Dans un script shell, je demande d'entrer un chiffre de 0 à 59.
Comment vérifier son résultat ?


"59" est un nombre sur deux chiffres.

deux moyens simples :

case "$result" in
[0-9]|[1-5][0-9]) echo ok;;
*) echo ko;;
esac

ou

test $result -le 59 -a $result -ge 0 && echo ok

Le premier évite habilement le lourd "if echo | grep"


Le deuxieme ne marche que si $result est un nombre valide.


declare -i result
test $result -le 59 -a $result -ge 0 && echo ok

Si on file un truc pas bon $result vaut 0 (ce qui n'est p-ê pas demandé mais
c'est juste pour parler de declare/typeset)


FAb



Avatar
Fred



declare -i result
test $result -le 59 -a $result -ge 0 && echo ok

Si on file un truc pas bon $result vaut 0 (ce qui n'est p-ê pas demandé mais
c'est juste pour parler de declare/typeset)


FAb


"declare" n'existe pas en Bourne Shell. C'est spécifique au bash ou au ksh.
Fred

Avatar
Eric Jacoboni
(Nicolas MICHEL) writes:

Bonjour

Dans un script shell, je demande d'entrer un chiffre de 0 à 59.
Comment vérifier son résultat ?


En utilisant l'expansion arithmétique des shells POSIX ?

if (( $NBRE >= 0 && $NBRE <= 59 )); then
echo ok
else
echo nok
fi

--
Éric Jacoboni, né il y a 1416921202 secondes

Avatar
Laurent Wacrenier
Eric Jacoboni écrit:
En utilisant l'expansion arithmétique des shells POSIX ?

if (( $NBRE >= 0 && $NBRE <= 59 )); then


C'est POSIX ?
Tu ne confonds pas avec $(( $NBRE >= 0 && $NBRE <= 59 ))

Avatar
Eric Jacoboni
Laurent Wacrenier <lwa@ teaser . fr> writes:

C'est POSIX ?
Tu ne confonds pas avec $(( $NBRE >= 0 && $NBRE <= 59 ))


Non, je ne confonds pas ;)

Mais tu me fais douter : je ne sais pas si la forme ((...)) est
normalisée (et j'ai la flemme de rechercher).

Mais je confirme qu'elle est reconnue par zsh, ksh93 et bash.
--
Éric Jacoboni, né il y a 1416922718 secondes

Avatar
Stephane Chazelas
2005-04-14, 12:15(+02), Fred:
[...]
"declare" n'existe pas en Bourne Shell. C'est spécifique au bash ou au ksh.
[...]


C'est principalement bash. ksh et zsh ont typeset. zsh a declare
aussi pour convenience pour ceux qui viennent de bash.

L'un comme l'autre ne sont pas super bien nommé.

Note qu'on ne trouve le Bourne shell aujourd'hui guere plus que
chez Solaris.

Ca fait plus de sens de dire que typeset comme declare ne sont
pas POSIX/SUSv3, c'est a dire qu'un Unix n'est pas censé avoir
"declare" dans son "sh" POSIX.

--
Stéphane

1 2