Просто интересно, как я могу проверить, находится ли значение с плавающей запятой в определенном диапазоне, используя «bc» и условные выражения в bash. Заранее спасибо
Например, я хочу выяснить, находится ли 17.2 в диапазоне от 17,5 до 18,2.
Недавно узнали, что я могу использовать bc для проверки в выражении, подобном этому:
if [ $(bc <<< "$result > 17.5") -eq 1 ]
пытались сделать это if [ $(bc <<< "$result > 17.5") && $(bc <<< "$result <= 18.2") -eq 1 ]
, но сохраняем синтаксическую ошибку, а также не уверены, что это правильное выражение или синтаксис.
Вы не можете использовать &&
в единственных квадратных скобках. У Вас есть различные варианты, хотя:
Использовать -a
в [ ... ]
.
if [ $(bc <<< "$result > 17.5") -eq 1 -a $(bc <<< "$result <= 18.2") -eq 1 ]
Используйте двойные квадратные скобки [[ ... ]]
та поддержка &&
.
if [[ $(bc <<< "$result > 17.5") == 1 && $(bc <<< "$result <= 18.2") == 1 ]]
Используйте два [ ... ]
условия, разделенные &&
.
if [ $(bc <<< "$result > 17.5") -eq 1 ] && [ $(bc <<< "$result <= 18.2") -eq 1 ]
Можно использовать строку, выдерживают сравнение на результате этих двух выражений
[[ $( bc <<< "$result > 17.5; %result <= 18.2" ) == $'1\n1' ]]
bc
понимает &&
, также:
if [[ $(bc <<< "$result > 17.5 && $result <= 18.2") == 1 ]]
Я предпочел бы 5.
Bash не может обработать плавания.
Первый мы добираемся, являются ли они в диапазоне. Если это верно (1) тогда, число находится в диапазоне:
test=$(echo "17.5<$result<18.2" | bc)
Тогда мы проверяем, что это верно с если.
if [ $test -eq 1 ]
then
echo true
else
echo false
fi