#!/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