红联Linux门户
Linux帮助

Bash脚本:比较版本号

发布时间:2016-09-03 10:26:45来源:topspeedsnail.com作者:斗大的熊猫
在写一个自动配置脚本时,我需要判断某个软件版本是否符合我的要求。例如,需要的最低版本满足($version ≥ 1.3.2),或者在某个版本范围(1.1.4 ≤ $version ≤ 2.4.3)。
版本号的格式一般是”X.Y.Z”,它是一个字符串。
在bash shell中,最简单的方法是使用sort命令,带”-V”选项。
 
sort命令的例子:
创建一个文件ver_test.txt:
2.3.5
0.3.1
1.2.3
3.0.0
2.5.1
 
sort命令排序:
$ sort -V ver_test.txt 
0.3.1
1.2.3
2.3.5
2.5.1
3.0.0
 
默认是从小到大,可以使用”-rV”选项逆序:
$ sort -rV ver_test.txt 
3.0.0
2.5.1
2.3.5
1.2.3
0.3.1
 
下面我们看看怎么用sort比较版本号
 
比较版本号的bash脚本:
#!/bin/bash 
VERSION1=$1
VERSION2=$2
# V1 > V2
function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }
# V1 >= V2
function version_ge() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"; }
# V1 <= V2
function version_le() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" == "$1"; }
# V1 < V2
function version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; } 
if version_gt $VERSION1 $VERSION2; then
echo "$VERSION1 > $VERSION2"
fi
if version_ge $VERSION1 $VERSION2; then
echo "$VERSION1 >= $VERSION2"
fi
if version_le $VERSION1 $VERSION2; then
echo "$VERSION1 <= $VERSION2"
fi
if version_lt $VERSION1 $VERSION2; then
echo "$VERSION1 < $VERSION2"
fi
 
大于:version_gt
大于等于:version_ge
小于等于:version_le
小于:version_lt
 
测试:
Bash脚本:比较版本号
 
本文永久更新地址:http://www.linuxdiyf.com/linux/23849.html