如何将字符串转换为浮点型,然后在条件运算中使用它?

如何将字符串转换为浮点型,然后在条件运算中使用它?

我正在尝试编写自己的 bash 脚本来检测 Debian 的发行版本是否低于 9.0

代码:

VERSION=$(cat /etc/debian_version)
echo $VERSION

if [ "$VERSION" -lt "9.0" ]; then
    echo "Debian version is less than 9"
else
    echo "Debian version is greater than 9"
fi

但我收到的错误是:

./test.sh: 第 4 行: [: 8.2: 需要整数表达式

基本上,$VERSION是一个字符串类型,但它是8.2.我试图让它成为8.2,但作为一个浮动。所以我可以用<=它。

答案1

试试这个,我用它来比较浮动bc

VERSION=$(cat /etc/debian_version)
echo $VERSION
if [ "`echo "${VERSION} < 9.0" | bc`" -eq 1 ]; then
    echo "Debian version is less than 9"
else
    echo "Debian version is greater than 9"
fi

一行使用awk

awk  '{if ($1 < 9.0) {print "Debian version is less than 9";} else if ($1 > 9.0){ print "Debian version is greater than 9";}}' /etc/debian_version

答案2

版本没有简单的浮点数,并且版本 1.10 大于 1.9。我认为使用sort实用程序的解决方案知道如何处理版本号:

check_versions(){
    # check_version <reference> <version to check>
    if [[ $1 == $2 ]]; then
        echo 'same'
    else
        low=$(echo -e "$1\n$2" | sort --version-sort | head --lines=1)
        if [[ $low == $1 ]]; then
            echo 'greater'
        else
            echo 'lower'
        fi
    fi
}

ref='8.5'      # reference version for check

check_versions $ref '8.2' # current version is lower!
check_versions $ref '8.5' # current version is equal!
check_versions $ref '8.12' # current version is greater!

我认为这应该是一个更好的解决方案。

相关内容