2016-04-17 3 views
0

私はbashスクリプティングが初めてです。私のコードは次のとおりです。Bashスクリプト "整数表現が期待されています"、他言語の代わりにbashで浮動小数点数を使用

MK=M 
SM=1.4 

if [[ $MK == "M" ]] 
then 
     if [ $SM -gt 1.3 ] 
      then 
      echo "Greater than 1.3M" 
      else 
      echo "Less than 1.3M" 
      fi 
else 
echo "Not yet M...." 
fi 

返信:

/tmp/tmp.sh: line 6: [: 1.4: integer expression expected 
Less than 1.3M 

は私が間違って何をしているのですか?ここで

答えて

0

最終的には、浮動小数点数に関しては、bashがひどく辛抱強くないからです。

  1. それはあなたが何かより大きい1.3 Mbのかどうかを判断しようとしたりしていないように見える、これは正しいです:ここでは非常に簡単に言えば、私はあなたが2つのうちのいずれかを行うことをお勧め?このような場合は、その後、あなたはそれを持っている方法のすべてを残して、ちょうど$smのためのKBを使用して、このよう

    を比較:の計算のために

    #/bin/bash 
    
    mk="p" 
    km="p" 
    sm="1400" 
    ms="1300" 
    
    if [[ $mk == $km ]] 
    then 
    if [ $sm > $ms ] 
    then 
    echo "Greater than 1.3M" 
    else 
    echo "Less than 1.3M" 
    fi 
    else 
    echo "Not yet M...." 
    fi 
    

    または

  2. 使用bc浮動小数点数...

    # /bin/bash 
    
    mk="p" 
    km="p" 
    sm="1.4" 
    ms="1.3" 
    
    if [ $(echo "$mk == $km" | bc) ] 
    then 
    if [ $(echo "$sm > $ms" | bc) ] 
    then 
    echo "Greater than 1.3M" 
    else 
    echo "Less than 1.3M" 
    fi 
    else 
    echo "Not yet M...." 
    fi 
    

もう一つ注意しなければならないのは、私のコードからわかるように、論理的な文字と数字をブール値と比較演算で使用するのではなく、データで新しい変数を準備しています。また、一時的にいくつかの条件で動作するかもしれませんが、bashはすべての変数名を小文字にすることを好みます。あなたに質問がある場合は私に教えてください。しかし、私は両方のコードチャンクをテストして、両方とも正常に動作します。

+0

ああ...右...私はそれを行うことができます。ありがとう。しかし、バッシュはフレンドリーではありませんか? :( –

+0

Bashは絶対に浮動小数点を扱うことができます。操作、比較、算術演算を行うには、コードをもっと必要とします。浮動小数点を使用する必要がある場合は、オフィスに入るとすぐに私はコードを書き直し、bcを使っていくつかの行を追加します。そして比較を行うためのいくつかの追加ステップとプロセスがあります。 教えてください。 – Matty

+0

私はキロバイトあなたが自由な時間を持っていれば、私に浮動小数点数に関する行をbashで渡してください... :) –

3

man bashが言うことだ:

arg1 OP arg2 ... ARG1とARG2は正または負の整数かもしれません。

浮動小数点数を比較しようとしているようです。

+0

正確な行を書く手助けはできますか? –

+1

別のスクリプト言語の使用を検討します。例えばPython。浮動小数点演算は、bashスクリプトの能力を超えています。 –

関連する問題