Как сделать сравнение float в Bash?

lock_percent=$(echo "scale = 5; $value2*100/$value1" | bc)
value=`echo "$lock_percent" | bc`

    if [[ "$value" > "$8" ]]; then
       echo "Lock Percentage:$value percentage State Critical"
       exit $STATE_CRITICAL
    fi

Я не могу выполнить сравнение float с этим. Я не могу понять, где я ошибаюсь.

Ответы

Ответ 1

Bash сам не может использовать float. В этом случае, возможно, вы можете умножить на 10 или 100 (и т.д.) и получить целочисленное значение, которое вы можете сравнить. Или вы можете использовать bc сравнение и возвращаемое значение:

echo "10.2>10.1" | bc

Ответ 2

# float number comparison
fcomp() {
    awk -v n1="$1" -v n2="$2" 'BEGIN {if (n1+0<n2+0) exit 0; exit 1}'
}

# test and example
fcomp_test() {
    if fcomp "$1" "$2"; then
       echo "$1<$2"
    else
       echo "$1>=$2"
    fi
}

fcomp_test 0.0 0.1
fcomp_test 0.1 0.1
fcomp_test -0.1 0.1
fcomp_test 1e3 1e4
fcomp_test -1.34e3 1.03e4
fcomp_test ' 0 ' ' 1 '