Problème dans script bash...

Eric -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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 .

3 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      L'oignon fait la force ;-)))
      0