#!/bin/bash
F1=$1
F2=$2
FLP=$(bc <<< "scale=5; (${F2} - ${F1})/${F2} * 100")
if (( $(echo "${FLP} 1" | awk '{print ($1 > $2)}') )); then
echo "greater"
else
echo "smaller"
fi
Adoptado de: link
Testamos nosso script e ele falha na comparação negativa de pontos flutuantes no bash. O que estamos fazendo errado?
$F1=10000000000
$F2=300
FLP=$(bc <<< "scale=5; ($F2 - $F1)/$F2 * 100")
if [ $FLP -eq "1" ]; then
echo " greater"
else
echo "smaller"
fi
Ele continua imprimindo "maior" com -99,99900
Obrigado a todos pela ajuda
#!/bin/bash
F1=$1
F2=$2
FLP=$(bc <<< "scale=5; (${F2} - ${F1})/${F2} * 100")
if (( $(echo "${FLP} 1" | awk '{print ($1 > $2)}') )); then
echo "greater"
else
echo "smaller"
fi
Adoptado de: link
A ajuda da Bash para -eq
declara que compara INTEGER
types. Não há suporte a ponto flutuante em [
.
O que eu recomendo é que você já esteja usando bc
para fazer o cálculo. Por que você não usa bc
para fazer a comparação? Como em vez de if A < B
, você pode testar if B-A > 0
, onde a subtração é feita por bc
, e a verificação do sinal pode ser feita facilmente no bash.
Tags bash linux shell shell-script