2011-05-11 74 views
2

如何將字符串轉換爲數字?下面的Bash腳本不能按預期方式工作。轉換爲數字

#!/bin/sh 

mynum="0.02" 

if [[ $mynum -lt 1 ]];then 
    echo "low" 
else 
    echo "high" 
fi 

錯誤消息

stack.sh: line 5: [[: 0.02: syntax error: invalid arithmetic operator (error token is ".02")

+0

您是否必須在Bourne Shell中執行此操作?如果你正在做浮點運算,你最好用Python,Perl,... – Johnsyweb 2011-05-12 05:14:04

回答

3

的問題是,通常bash僅支持整數運算;您需要將漂浮或複雜的數學運算到dcbc

您可以在這種情況下,騙取:

case $mynum in 
0 | 0.* | .* | -*) 
    echo low 
    ;; 
*) 
    echo high 
    ;; 
esac 

但是,這顯然不是普遍適用的。

2

以下爲我工作。這只是想法如何使用bc。根據需要更改代碼。

mynum="1.02" 

d=\`echo "$mynum-1" | bc\` 
if [ "${d:0:1}" = "-" ] 
then 
    echo "low" 
else 
    echo "high" 
fi 
+0

+1 bc是處理外殼數學的方法 – hmontoliu 2011-05-11 06:33:07

-2

您可以使用 「< 」「>」,而不是-lt-gt。例如:

a=0.09;[[ $a < 1 ]] && echo low ||echo big  
low 
a=1.01;[[ $a < 1 ]] && echo low ||echo big  
big 
+0

它適用於這些情況,但它不是在做浮點運算。這只是做一個字符串比較。試試'a = 11.1; [[$ a <9]] && echo'$ a <9'|| echo'$ a> = 9'' – l0b0 2011-05-11 09:41:10

+0

@ l0b0也許有某事。錯誤。另一種方法,你可以'''echo'$ a <9「| bc \'-eq 1]' – xiaofengmanlou 2011-05-17 02:47:37