2013-10-09 73 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