我需要在bash脚本中比较两个数字。我收到一个整数错误。还有其他方法吗?
我们的构建格式为YYYY.M或YYYY.MM。
所以我需要比较2014.7(2014年7月)的构建年龄大于2014。10(2014年10月)。
#!/bin/bash
NEWVER="2014.10"; # 2014.10
CURVER=$(head -n 1 /release.ver); # 2014.7
if [ $NEWVER > $CURVER ]; then
echo "this version is new";
fi
答案 0 :(得分:0)
复杂的是,7月的格式为2014.7
,而不是2014.07
。因此,浮点运算不起作用。一种解决方案是将年份和月份信息分开并单独进行比较:
NEWVER="2014.10"
CURVER=2014.7
IFS=. read major1 minor1 <<<"$NEWVER"
IFS=. read major2 minor2 <<<"$CURVER"
[[ $major1 -gt $major2 || ($major1 -eq $major2 && $minor1 -gt $minor2) ]] && echo newer
或者,我们可以修复月份格式,然后进行浮点比较:
fix() { echo "$1" | sed 's/\.\([0-9]\)$/.0\1/'; }
NEWVER=$(fix "$NEWVER")
CURVER=$(fix "$CURVER")
(( $(echo "$NEWVER > $CURVER" | bc -l) )) && echo newer
答案 1 :(得分:0)
我所知道的唯一具有版本比较操作的标准实用程序是Gnu sort
,它使用选项-V
实现版本比较作为扩展。 (这并不意味着没有任何其他的;只是我无法想到)。使用Gnu sort
,可以使用以下内容:
key=$CURVER$'\n'$NEWVER
if [[ $key = $(sort -V <<<"$key") ]]; then
# NEWVER is newer or the same
else
# NEWVER is older
fi