2013-10-09 52 views
0

我知道这是一个愚蠢的错误,但我仍然可以找到解决方案。
我必须比较apache版本。如果apache版本大于2.4.3,我必须在安装apache之前先在系统中安装apr。
但由于某种原因,我在比较中得到一个算术错误。
基本上,我得到了Apache的版本,我必须把它比作2.4.3
这是测试脚本:
bash脚本上的算术错误

#!/bin/ksh 

version="2.4.4" 
echo "$version" 

#if [ '2.4.3' == "$version" ] || [ '2.4.3' < "$version" ] 
if [ '2.4.3' -gt '$version' ] 

then 
     print "Mayor or equal" 
else 
     print "Error" 
fi 

这是输出:

2.4.4 
./test9.sh[9]: [: 2.4.3: arithmetic syntax error 
Error 

我想要知道为什么我无法进行比较?
谢谢

回答

1
if [[ '2.4.3' > "$version" ]] 
then 
    echo "Mayor or equal" 
else 
    echo "Error" 
fi 
+0

也许是对[[''和'['? – jxh

+0

http://www.tldp.org/LDP/abs/html/testconstructs.html – michael501

2

因为2.4.3不是数字,所以你不能使用NUMERIC比较。

这些是字符串,并且比较版本就不是一个好主意。例如:

1.2.3 >= 1.0.0 
    but 
    1.2.3 < 1.10.3 

看到问题了吗?

-1

在这种情况下,您可以删除小数,但这不是一个通用的解决方案。这将为您给出的例子,而不是为1.10.5版本甚至2.10的工作......

[ 244 -gt ${version//./} ] && echo True 

如果你想要的东西非常强大(长),你可以使用the solution在评论链接。

+1

仅解决一个(非常)特殊情况并不是很有用。 – chepner

+0

好吧,我期待你的反对意见,但是它与很多情况相符,只是当版本不是beyone 9而不是当有不同数量的子版本时。 [apache版本]似乎都不是这种情况(http://httpd.apache.org/docs/)。我明确表示,这仅仅是针对OP的情况,强大的解决方案非常长,并且可能用于大多数用途。 – beroe