Shell-Script

檢查十進制數是否在 bc 範圍內

  • August 10, 2017

如果,這顯然不起作用,我已經寫了這個,我仍然無法克服它:

#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 &lt; x &lt; 136.9。但我懷疑 bash/bc 的行為與我的數學老師不同。

如果 bc 不會數到 137,那就太好了;)

與例如 python 不同,bc不支持鍊式比較:

a &lt; b &lt; c

要執行兩個比較並要求兩者都為真,請使用邏輯與(需要 GNU bc):

(a &lt; b) && (b &lt; c)

例如:

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

POSIX 公元前

如果你沒有 GNU bc,你可以用乘法替換邏輯與:

$ a=104.9; b=136; c=136.9; if echo "($a &lt; $b)*($b &lt; $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 &lt; $b)*($b &lt; $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
False

引用自:https://unix.stackexchange.com/questions/385084