Notez que vous devez être prudent lorsque vous manipulez des nombres à virgule flottante et si vous testez l'égalité, vous voulez vraiment choisir une certaine précision, puis comparer en utilisant cela. Quelque chose comme:
if (abs(x1-x2) < 0.0001) then equal # pseudo-code
la raison étant que les ordinateurs que nous avons affaire avec des fractions binaires limitées précision pas vrai reals mathématiques. Limiter la précision en bc avec l'échelle = 3 aura cet effet.
Je vous déconseille également d'essayer de faire ce genre de choses dans un script shell. Ce n'est pas que vous ne pouvez pas le faire, mais vous aurez à débourser beaucoup de petites commandes secondaires pour faire les choses difficiles et c'est lent à exécuter et généralement une douleur à écrire - vous passez le plus clair de votre temps à essayer le shell faire ce que vous voulez plutôt que d'écrire le code que vous voulez vraiment. Déposez-vous plutôt dans un langage de script plus sophistiqué. ma langue de choix est perl mais il y en a d'autres. comme ça ...
echo $var1 $var2 $total | perl -ne 'my ($var1, $var2, $tot) = split /\s+/; if ($var1/$tot == $var2/$tot) { print "equal\n"; }'
Notez également que vous êtes en divisant par la même valeur (total de $ dans votre question) si la comparaison entière peut être fait contre les numérateurs (var1 et var2) fourni $ total est positif
'if [ "$ (echo $ resutl1 '>' result2 de $ | bc -l)" -eq 1], puis' travaille pour moi :) – Reem