Abh*_*ran 21 version shell-script test numeric-data
假设我想比较gcc
版本以查看系统是否安装了最低版本。
为了检查gcc
版本,我执行了以下操作
gcc --version | head -n1 | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)
输出是
4.8.5
Run Code Online (Sandbox Code Playgroud)
所以,我写了一个简单的if
语句来检查这个版本与其他一些值
if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then
echo "Less than 5.0.0"
else
echo "Greater than 5.0.0"
fi
Run Code Online (Sandbox Code Playgroud)
但它抛出一个错误:
[: integer expression expected: 4.8.5
Run Code Online (Sandbox Code Playgroud)
我理解我的错误,我使用字符串进行比较并且-lt
需要整数。那么,有没有其他方法可以比较版本?
Luc*_*ini 38
我不知道它是否漂亮,但它适用于我知道的每种版本格式。
#!/bin/bash
currentver="$(gcc -dumpversion)"
requiredver="5.0.0"
if [ "$(printf '%s\n' "$requiredver" "$currentver" | sort -V | head -n1)" = "$requiredver" ]; then
echo "Greater than or equal to ${requiredver}"
else
echo "Less than ${requiredver}"
fi
Run Code Online (Sandbox Code Playgroud)
(注意:用户'通配符'的更好版本:https : //unix.stackexchange.com/users/135943/wildcard,删除了附加条件)
较短的版本:
version_greater_equal()
{
printf '%s\n%s\n' "$2" "$1" | sort --check=quiet --version-sort
}
version_greater_equal "${gcc_version}" 8.2 || die "need 8.2 or above"
Run Code Online (Sandbox Code Playgroud)