我正在编写一个 shell 脚本,它必须知道某个程序版本是否小于或等于版本 x.xx.xx
这是一个示例脚本,用于尝试解释我想要做什么:
#!/bin/bash
APPVER="`some command to output version | grep x.xx*`"
if [[ "$APPVER" is smaller or equal to "x.xx*" ]]; then
do something
else
do something else
fi
有没有办法做到这一点?我找到了比较数字的方法,但它们不适用于版本号。我需要一个不使用或尽可能少使用程序的解决方案。
任何帮助表示赞赏!
答案1
如果你有 GNU 排序,请使用它的版本比较模式。
if { echo "$APPVER"; echo "x.y.z"; } | sort --version-sort --check; then
echo "App version is x.y.x or less"
fi
答案2
在 bash 中,你可以这样做printf -v
:
vercomp(){
local a b IFS=. -; set -f
printf -v a %08d $1; printf -v b %08d $3
test $a "$2" $b
}
if vercomp 2.50.1 \< 2.6; then
echo older
else
echo newer
fi