Shell-Script
檢查十進制數是否在 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,那就太好了;)
與例如 python 不同,
bc
不支持鍊式比較:a < b < c
要執行兩個比較並要求兩者都為真,請使用邏輯與(需要 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 公元前
如果你沒有 GNU bc,你可以用乘法替換邏輯與:
$ 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