Division bash [Fermé]

Signaler
Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
14 décembre 2011
-
 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 !

4 réponses

Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 289
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
14 décembre 2011

Bah en fait même quand je fais res=(100*$1)/$2, quand je fais le echo $RESil me répond (100*5)/9
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 289
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.
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 289
si tu veux utiliser des flottant, mieux vaut utiliser bc (cf. man bc).
Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
14 décembre 2011

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
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 308
comme écrit plus haut, bash ne fait que des divisions entères, faire
res=$((echo "scale=4 ; $a/$b" | bc))
Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
14 décembre 2011

Avec ça j'ai le droit à un syntax error: invalid arithmetic operator (error token is ""scale=4 ; 5/11" | bc")
Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
14 décembre 2011

Merci beaucoup !
Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
14 décembre 2011

Bonjour, comment ajouter dans mon script la gestion de la division par zeo car la j'ai une erreur

Runtime error (func=(main), adr=14): Divide by zero

Merci d'avance.
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 308
par ex.
res=0
if [ $b -ne 0 ] ; then
  res=$(echo "scale=4 ; $a/$b" | bc) 
fi
printf "%.4f\n"  $res
Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
14 décembre 2011

MErci il arrive a me le calculer mais il me fait une erreur :
[: -ne: unary operator expected
Messages postés
18
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
14 décembre 2011

C moi qui me suit déchiré désolé ca marche !!! Merci beaucoup.