2012-05-05 61 views
0

我有一個存儲命令輸出的變量。我如何將它與浮點數進行比較?Bash比較

更具體地講我做

x=$(tail -n 1 foo| cut -d ' ' -f2) 

if (($x < 0)); then ... 

其中foo是一個文件名。在做上述我收到以下錯誤

-0.08 < 0 : syntax error: invalid arithmetic operator (error token is "0.08 < 0") 

我需要比較的值是-0.08,但誤差記號是不同

我應該爲這種比較嗎?

回答

3

bash不支持浮點運算。
但是,您可以使用bc這是一個外部程序來做算術。

if (($(bc <<< "$x < 0"))); then 
    printf "%f is less than 0\n" "$x"; 
fi 

從該名男子頁:

關係運算符

expr1 < expr2 
     The result is 1 if expr1 is strictly less than expr2. 

    expr1 <= expr2 
     The result is 1 if expr1 is less than or equal to expr2. 

    expr1 > expr2 
     The result is 1 if expr1 is strictly greater than expr2. 

    expr1 >= expr2 
     The result is 1 if expr1 is greater than or equal to expr2. 

    expr1 == expr2 
     The result is 1 if expr1 is equal to expr2. 

    expr1 != expr2 
     The result is 1 if expr1 is not equal to expr2. 

一個也可以使用awk也支持浮點運算。

0

如果ksh對您可用,您可以使用它來編寫腳本而不是Bash,因爲它支持浮動。 Zsh也支持浮動。

#!/usr/bin/ksh 
x=$(tail -n 1 foo| cut -d ' ' -f2) 

if ((x < 0)) 
then 
    echo "less than" 
fi