Je sais que c'est vraiment une question stupide, mais je ne sais pas comment faire cela à Bash:
20 / 30 * 100
Ça devrait être 66.67
mais EXPR dit 0
, parce que cela ne supporte pas flotter. Quelle commande sous Linux peut remplacer expr et faire cette égalité?
bc
va le faire pour vous, mais la commande est importante.
> echo "scale = 2; 20 * 100 / 30" | bc
66.66
> echo "scale = 2; 20 / 30 * 100" | bc
66.00
ou, pour votre cas spécifique:
> export ach_gs=2
> export ach_gs_max=3
> x=$(echo "scale = 2; $ach_gs * 100 / $ach_gs_max" | bc)
> echo $x
66.66
Quelle que soit la méthode que vous choisissez, ceci est mûr pour l'inclusion en fonction de votre vie plus facile:
#!/bin/bash
function pct () {
echo "scale = $3; $1 * 100 / $2" | bc
}
x=$(pct 2 3 2) ; echo $x # gives 66.66
x=$(pct 1 6 0) ; echo $x # gives 16
J'utilise généralement Perl:
Perl -e 'print 10 / 3'
juste le faire dans awk
# awk 'BEGIN{print 20 / 30 * 100}'
66.6667
enregistrez-le à la variable
# result=$(awk 'BEGIN{print 20 / 30 * 100}')
# echo $result
66.6667
> echo "20 / 30 * 100" | bc -l
66.66666666666666666600
C'est une simplification de la réponse de Paxdiablo. Le -l définit l'échelle (nombre de chiffres après la décimale) à 20. Il charge également une bibliothèque de mathématiques avec des fonctions de Trig et d'autres choses.