Verificando que un número decimal esté en un range en bc

He escrito esto si, obviamente, no funciona, y todavía no puedo superarlo:

#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 

Pero, cuando el valor está fuera de los ranges, resulta en esto:

 20170810003646 - LASTEFFECTIVEHASH=139.2 is between 104.9 and 136.9 

Estoy siguiendo la syntax matemática: si x> 104.9 y <136.9, en matemáticas lo escribes 104.9 < x < 136.9 . Pero sospecho que bash / bc se está comportando de manera diferente al profesor de matemáticas.

Sería genial si bc no dejara de contar hasta 137;)

Solutions Collecting From Web of "Verificando que un número decimal esté en un range en bc"

A diferencia de, por ejemplo, python, bc no admite comparaciones encadenadas:

 a < b < c 

Para realizar ambas comparaciones y exigir que ambas sean verdaderas, use lógica-y (requiere GNU bc):

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

Por ejemplo:

 $ 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 aC

Si no tiene GNU bc, puede replace lógica-y con multiplicación:

 $ 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