Problème dans script bash...

Eric -  
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,

Dans mon script, je récupère dans des lignes, une température qui est de forme 20.12
Je cherche à ne capturer que 20.1 par exemple; donc tronquer à 1 chiffre après la virgule.
Je cherche aussi à faire en sorte que:
if [ $T -gt 21 ]; then
echo "Il fait $T"
fi
Mais ça ne fonctionne pas...

Merci pour votre aide.

Cordialement, Eric .
A voir également:

3 réponses

jisisv Messages postés 3678 Statut Modérateur 934
 
printf existe en commande interne dans bash
[johand@horus]~ $T=18,25; printf "Il fait %3.1f °C\n" $T
Il fait 18,2 °C
[johand@horus]~ $T=18.25; printf "Il fait %3.1f °C\n" $T
-bash: printf: 18.25: invalid number
Il fait 0,0 °C
[johand@horus]~ $LANG=C; T=18.25; printf "Il fait %3.1f °C\n" $T
Il fait 18.2 °C

help printf; man bash; man 3 printf
Attention aux locales...
Johan
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Tu peux aussi essayer avec ça :
[jp@MDK ~]$ T=21.12 ; T2=$(expr "$T" : "\(.*\..\)"); echo "Il fait $T2° C"
Il fait 21.1° C
[jp@MDK ~]$
En ce qui concerne ton autre problème :
if [ $T -gt 21 ]; then
echo "Il fait $T"
fi 
La comparaison échoue car "bash" ne sait traiter que des chaînes de caractères ou des entiers, mais pas des valeurs avec virgules.
Pour ta comparaison, il te faudra arrondir ta valeur à l'entier inférieur avant toute chose...

;-))
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut à vous,

Eric il te faudra arrondir ta valeur à l'entier inférieur avant toute chose...
T=20.12
TARRONDI=$(echo "scale=0;$T/1" | bc)
lami20j
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
L'oignon fait la force ;-)))
0