10進数がbcの範囲内にあることを確認してください。

10進数がbcの範囲内にあることを確認してください。

私は次のように書いていますが、明らかにうまくいかず、まだ克服することはできません。

#LASTEFFECTIVEHASH
if (( $(echo "$LASTEFFECTIVEHASHMINVAL < $LASTEFFECTIVEHASH < $LASTEFFECTIVEHASHMAXVAL" | $BC -l) )); then
                echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $LOGFILE
else
                echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is not between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $MSGFILE $LOGFILE
fi

ただし、値が範囲外の場合、次のような結果が発生します。

20170810003646 - LASTEFFECTIVEHASH=139.2 is between 104.9 and 136.9

私は数学の構文に従います。 x > 104.9で< 136.9の場合、数学では104.9 < x < 136.9。しかし、私はbash / bcが私の数学の先生とは違う振る舞いをしていると思います。

bcが137まで数えられないなら本当にいいと思います;)

ベストアンサー1

Pythonとは異なり、連鎖bc比較はサポートされていません。

a < b < c

これら2つの比較を実行し、両方が真になるように要求するには、論理ANDを使用します(GNU bcが必要です)。

(a < b) && (b < c)

たとえば、

$ a=104.9; b=136; c=136.9; if echo "($a < $b) && ($b < $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
True
$ a=104.9; b=137; c=136.9; if echo "($a < $b) && ($b < $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
False

POSIX BC

GNU bc がない場合、論理ANDを乗算に置き換えることができます。

$ a=104.9; b=136; c=136.9; if echo "($a < $b)*($b < $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
True
$ a=104.9; b=137; c=136.9; if echo "($a < $b)*($b < $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
False

おすすめ記事