如何在Bash中进行浮动比较?

19 floating-point bash shell comparison

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
Run Code Online (Sandbox Code Playgroud)

我无法与此进行浮动比较.我无法理解我哪里出错了.

igu*_*tin 28

Bash本身不能使用float.在这种情况下,您可以乘以10或100(等)并获得可以比较的整数值.或者,您可以使用bc比较和返回值:

echo "10.2>10.1" | bc
Run Code Online (Sandbox Code Playgroud)

  • 你也可以做`bc <<<"10.2> 10.1"`,这更快:) (13认同)

sli*_*nov 14

# 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 '
Run Code Online (Sandbox Code Playgroud)

  • 如果您删除了 `function` 关键字,那么 bash 特定的内容就会少得多。还要考虑 `awk -v n1="$1" -v n2="$2"` 和 `fcomp "$1" "$2"` —— 这样值就不会受到字符串拆分和全局扩展的影响(当然,如果这如果使用正确,它们都将是数字,但最好确保使用不当会导致关于无效数字的有用错误,而不是更随意的错误)。 (2认同)