Problème dans script bash...

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. Modérateur
    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
    1. Modérateur
      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
      1. Modérateur
        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. Modérateur
          L'oignon fait la force ;-)))
          0