Division bash

arkard Messages postés 19 Statut Membre -  
 stevec -
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 !

A voir également:

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
1
arkard Messages postés 19 Statut Membre
 
Bah en fait même quand je fais res=(100*$1)/$2, quand je fais le echo $RESil me répond (100*5)/9
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
si tu veux utiliser des flottant, mieux vaut utiliser bc (cf. man bc).
0
arkard Messages postés 19 Statut Membre
 
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
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
comme écrit plus haut, bash ne fait que des divisions entères, faire
res=$((echo "scale=4 ; $a/$b" | bc))
0
arkard Messages postés 19 Statut Membre
 
Avec ça j'ai le droit à un syntax error: invalid arithmetic operator (error token is ""scale=4 ; 5/11" | bc")
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
j'ai mis trop de parenthéses au post 6
$ a=5 ; b=11 
$ res=$(echo "scale=4 ; $a/$b" | bc) 
$ echo $res 
.4545 
$ 
0
arkard Messages postés 19 Statut Membre
 
Cool, ca marche mieux merci mais le résultat est .4545, comment faire pour avoir le 0 ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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à.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
$ printf "%.4f\n"  $res
0.4545
$ 
0
arkard Messages postés 19 Statut Membre
 
Merci beaucoup !
0