Мы протестировали наш скрипт, и он не работает при отрицательном сравнении с плавающей запятой в bash. Что мы делаем не так ?

$F1=10000000000
$F2=300
FLP=$(bc <<< "scale=5; ($F2 - $F1)/$F2 * 100")
if [ $FLP -eq "1" ]; then
    echo " greater"
else
    echo "smaller"
fi

Он продолжает печатать "больше" с -99,99900

Спасибо всем за помощь

2 ответа2

0

Справка Bash для -eq утверждает, что она сравнивает типы INTEGER . В [ . Нет поддержки с плавающей запятой.

Я бы порекомендовал, чтобы вы уже использовали bc для вычисления - почему бы вам не использовать bc для сравнения? Например , вместо того, if A < B , вы могли бы проверить, if B-A > 0 , где вычитание выполняется bc , а проверка сигнала легко выполняется в bash.

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

Принято с: https://stackoverflow.com/questions/11237794/how-to-compare-two-decimal-numbers-in-bash-awk

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .