Division bash

Bonjour,

Je suis une quiche en scripting, mais quand il faut, on n'a pas le choix.
J'essaie vainement de faire une division sous bash.
Mon script fait 2 requetes SQL que je stocke en variable et je veux faire un ratio de ces 2 variables, le multiplier par 100, le retrancher de 100 et l'arrondir à l'entier supérieur.
J'essaie d'abord de faire la division en faisant un bête RES=($1/$2), comme j'ai vu sur différents forums mais ça m'affiche par exemple 5/9, ça ne fait donc pas la division, ça m'affiche le résultat des 2 requetes (qui elles fonctionnent bien d'ailleurs).

Help please !

4 réponses

  1. Avec ça j'ai le droit à un syntax error: invalid arithmetic operator (error token is ""scale=4 ; 5/11" | bc")
    1. Contributeur
      j'ai mis trop de parenthéses au post 6
      $ a=5 ; b=11 
      $ res=$(echo "scale=4 ; $a/$b" | bc) 
      $ echo $res 
      .4545 
      $ 
    2. Cool, ca marche mieux merci mais le résultat est .4545, comment faire pour avoir le 0 ?
    3. Contributeur
      comme je t'ai dit : "man bc" tu trouvera la réponse.
      D'un autre coté, comme ton but final est d'avoir un entier, mieux vaut tout faire pour écrire directement ta formule en conséquence, c'est à dire en multipliant par 100 dès le début déjà.
    4. Contributeur
      $ printf "%.4f\n"  $res
      0.4545
      $ 
    5. Merci beaucoup !
  2. exec bash
    a=18
    b=2
    (( res=$a/$b ))
    echo $res

    Ca ça marche.

    Dans mon script j'ai mis (( res=$a/$b )) et j'ai mis le echo $res derriere et maintenant il me dit 0
    1. Contributeur
      comme écrit plus haut, bash ne fait que des divisions entères, faire
      res=$((echo "scale=4 ; $a/$b" | bc))
  3. Bah en fait même quand je fais res=(100*$1)/$2, quand je fais le echo $RESil me répond (100*5)/9
    1. Contributeur
      essai les lignes suivante dans ta console :
      exec bash
      a=18
      b=2
      (( res=$a/$b ))
      echo $res

      si ça n'affiche pas 9, c'est qu'il y a un souci ailleurs.
    2. Contributeur
      si tu veux utiliser des flottant, mieux vaut utiliser bc (cf. man bc).
  4. Contributeur
    pour passer en mode mathématique, il faut deux parenthèses normalement.
    (( res = $1/$2 ))
    mais attention, bash travail sur des entiers, donc il vaut mieux faire res=(100*$1)/$2