文字列を浮動小数点に変換してから条件付き演算に使用する方法は? [コピー]

文字列を浮動小数点に変換してから条件付き演算に使用する方法は? [コピー]

Debianディストリビューションが9.0より古いことを確認するために、独自のbashスクリプトを作成しようとしています。

パスワード:

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.2float8.2です。だから私は<=それを使用することができます。

答え1

これを試してみてください。私はそれをfloats比較に使用します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

1行で使用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!

私はこれがより良い解決策になるべきだと思います。

関連情報