23

浮動小数点変数を整数と比較したい。これが bash で行うのが最善ではないことはわかっていますが、スクリプト全体は既に bash で作成されています。$number には任意の整数を指定できます。50 以下の場合は output1 が必要で、それ以外の場合は他の変数 k を使用した出力が必要です。これは私がこれまでに持っているものです:

number=43
test=$(echo "scale=2; $number/50" | bc -l)
echo "$test"
for k in {1..5}
do
    if ["$test" -le 1]
    then echo "output"

    elif ["$test" -gt $k]
    then echo "output$k"
    fi
done

test=0.43 で試してみると、最初のループも機能しません。整数と浮動小数点の比較に関係していると思いますが、機能させることはできません。

不足しているものはありますか?

PS:これ[0.43: command not foundは端末が出力するものです。

4

2 に答える 2

45

Bash はフロートを処理できません。代わりにパイプしbcます:

if [ $(echo " $test > $k" | bc) -eq 1 ]

ただし、表示されるエラーは、testコマンド (つまり[) の前後にスペースが必要なためです。

(( ... ))次のような数値を比較するため、使用する方がさらに優れています。

if (( $(bc <<< "$test > $k") ))

ループ内の部分は次のようになります。

if (( $(bc <<< "$test <= 1") ))
then
    echo "output"
elif (( $(bc <<< "$test > $k") ))
then
    echo "output$k"
fi

関係式は、関係が false の場合は 0 に評価され、関係が true の場合は 1 に評価されます [ source ]。ただし、これは の動作であり、準拠GNU bcしていないことに注意してくださいPOSIX

于 2013-03-05T13:17:49.003 に答える