2016-09-04 5 views
0

次のスクリプトを用意しました。floatと別のフロートを比較したいと思います。浮動小数点数をシェルで定義された数値と比較する

#!/bin/sh 
echo 'Enter a real number' 
read n 
echo n=$n 

if (($(echo "$n > 0.0" |bc -l))) 
then 
    echo 'n is +ve' 
elif (($(echo "$n < 0.0" |bc -l))) 
then 
    echo 'n is -ve' 
else 
    echo 'n is zero' 
fi 

これは私のOS Xで正常に動作しますが、しかしif文は( "見つからない")のLinux(Ubuntuの)でエラーを示しています。

もっと普遍的な構文は何でしょうか? (私は浮動小数点のためにbcとまだ働くことができると思います)。

+0

?あなたは 'bc'をインストールしていないのですか、あるいはあなたは非Bashシェルを使っていますか? – tripleee

+0

あなたのshebangはあなたのスクリプトを実行するために '/ bin/sh'が呼び出されたことを示します。 '#!/ bin/bash'に変更しようとするべきです。 '(())'構造体はすべてのシェルで同じ動作をしません。 – SLePort

答えて

0

私はそれが便利なのawkを使用するために見つける:正確から来る「見つからない」ん

if echo $n | awk '$0 > 0.0' | grep -q . ; then 
    echo 'n is +ve' 
elif echo $n | awk '$0 < 0.0' | grep -q . ; then 
    echo 'n is -ve' 
else 
    echo 'n is zero' 
fi 
関連する問題