Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/02/2008, à 05:39

jcvittet

test if [ $variable -gt valeur ]

Dans le test if [ $variable -gt valeur ]
valeur peut elle avoir des décimales ?
merci

#2 Le 25/02/2008, à 07:53

Laurent82

Re : test if [ $variable -gt valeur ]

en bash avec des doubles crochets :

if [[ 3.34 > 3.33 ]] ; then  echo OK ; fi

tu n'as pas posté dans le bon salon roll

#3 Le 26/02/2008, à 15:24

hells_dark

Re : test if [ $variable -gt valeur ]

Même si c'est pas le bon forum..

Je capte pas bien l'histoire des doubles crochets..
Parfois ça marche sans, et parfois même, ça ne marche pas avec..
Il faut les utiliser quand exactement ?

Edit : je viens de lire qu'il fallait mettre des doubles crochets quand le test portait sur des variables oO

Dernière modification par hells_dark (Le 26/02/2008, à 15:39)


"You caught me at a strange time in my life."
devianArt - site perso

Hors ligne

#4 Le 26/02/2008, à 16:33

Alain.g

Re : test if [ $variable -gt valeur ]

Le problème vient plutôt de l'opérateur -gt (-lt  etc...) qui ne permet que de comparer des entiers.
On peut très bien utiliser le simple crochet [ , mais dans ce cas l'opérateur ">" doit être échappé :

if [ 3.14 \> 3.13  ] ; then echo OK ; fi

___

hells_dark a écrit :

je viens de lire qu'il fallait mettre des doubles crochets quand le test portait sur des variables

Je ne sais pas où tu as lu ça mais c'est faux. on peut très bien faire des tests sur des variables avec [ (équivalent de la commande "test" en interne)
[[ est en quelques sortes une version étendue de [ , qui offre plus de possibilités.

Par exemple utiliser des métacaractères du shell (* ? [a-z] ..)

[[ abc = *a*  ]] && echo OK

voir des regex depuis bash 3 avec l'opérateur =~
exemple (bidon)

 [[ abc123 =~ ^[a-z]{3}[123]+$ ]] && echo OK

ou encore d'utiliser les opérateurs && ou || à l'intérieur :

[[ abc = *a* || abc = *1* ]] && echo OK

Dernière modification par Alain.g (Le 26/02/2008, à 16:38)


Xubuntu Karmic !

Hors ligne

#5 Le 26/02/2008, à 18:03

hells_dark

Re : test if [ $variable -gt valeur ]

Haaaaa !
Merci beaucoup Alain.g, ça c'est clair smile


"You caught me at a strange time in my life."
devianArt - site perso

Hors ligne

#6 Le 26/02/2008, à 21:07

jeromeg

Re : test if [ $variable -gt valeur ]

Hop, déplacé dans la section Programmation, la section Trucs et Astuces sert à donner des astuces.

Hors ligne

#7 Le 28/02/2008, à 16:16

kaworu

Re : test if [ $variable -gt valeur ]

Bonjour !

Alain.g a écrit :

Le problème vient plutôt de l'opérateur -gt (-lt  etc...) qui ne permet que de comparer des entiers.
On peut très bien utiliser le simple crochet [ , mais dans ce cas l'opérateur ">" doit être échappé :

if [ 3.14 \> 3.13  ] ; then echo OK ; fi

Attention (!). avec test ou [ il faut utiliser les opérateurs avec des lettres (-lt,-gt,-eq...)
quand on travaille avec des nombres entiers, et les opérateurs =,<,>... seulement avec les chaînes de caractères.
En effet > fait un test littérale:

[ 17 \> 160 ] && echo OUPS

Quand on veut comparer des nombres à virgules, il faut utiliser let ou expr:

# avec let
let 'bool = 3.14 > 3.13'
if [ $bool -eq 1 ]; then echo OUF; fi

# avec expr
if expr 3.14 \> 3.13 >/dev/null; then echo OUF; fi # Ici on doit rediriger la sortie de expr vers /dev/null, sinon le script affiche 1.
if [ `expr 3.14 \> 3.13` -eq 1 ]; then echo OUF; fi

let est un built-in du shell, donc toujours présent et bien plus performant que expr (appel externe).
La dernière ligne est vraiment mauvaise, elle crée un sous-shell juste pour calculer l'expression.
Personnelement j'utiliserai let, qui est portable/performant/lisible smile

[[ est plus agréable à utiliser que [/test, mais ça ne marche (presque) que sous bash. Donc si on veut un script
portable il vaut mieux utiliser [ et/ou test.


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#8 Le 28/02/2008, à 16:32

Alain.g

Re : test if [ $variable -gt valeur ]

Merci pour la correction kaworu wink

on peut également utiliser bc

Exemple en bash :

if ((`bc<<<'3.14>3.13'`)) ; then echo OK ; else echo BAD ; fi

Edit : en fait non,  ce n'est pas bon avec expr, même problème qu'avec [[ :

if expr 17.14 \> 160.13 >/dev/null; then echo OUPS; fi

ne semble pas fonctionner avec let non plus

Dernière modification par Alain.g (Le 16/09/2008, à 16:42)


Xubuntu Karmic !

Hors ligne