나는 다음과 같이 작성했지만 분명히 작동하지 않으며 여전히 극복할 수 없습니다.
#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
이 두 비교를 수행하고 둘 다 참이 되도록 요구하려면 논리 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