1

Тема: Bash: выполнить сравнение чисел

здравствуйте. Не получается сравнить числа в цикле while

#!/bin/bash
read var
read bvar
h=$(echo "($bvar-$var)/10" | bc -l)
echo "$h" 
x=$var
while [ $x -le $bvar ]
do
x=$(echo "("$x"+"$h")" |bc)
echo "$x"
done

В выводе выдает:

.10000000000000000000
1.10000000000000000000
scr: line 8: [: 1.10000000000000000000: integer expression expected

то есть значение h, первое значение x, а далее не может сравнить полученное вещественное значение с целым. Кто может подсказать, как это реализовать?

2 (изменено: Rumata, 2014-10-14 22:29:07)

Re: Bash: выполнить сравнение чисел

Чистый шелл умеет выполнять только целочисленные вычисления. Для выполнения арифметических операций с действительными числами лучше выбрать один из пунктов:

1. отказаться от использования шелла в пользу более продвинутых средств (Perl, Python и т.д.)
2. перейти к целочисленным операциям (например, не выполнять деление на 10)
3. использовать "башизмы" (расширенные средства Bash, несовместимые с другими версиями шелла)
4. использовать внешние средства (bc, awk, perl, python). Но, вызов внешней программы - ресурсоемкая операция, да еще выполняемая в цикле, поэтому этот пункт можно рассматривать только в учебных целях.

Скажите, в чем смысл Вашей задачи, где требуется выполнять арифметические операции с действительными числами в шелле?

( 2 * b ) || ! ( 2 * b )

3 (изменено: xakerpaul, 2014-10-15 13:58:24)

Re: Bash: выполнить сравнение чисел

по заданию нужно произвести табулирование любой функции с аргументами в диапазоне [a,b]. Шаг изменения h аргумента x вычисляется по формуле (b-a)/100000, то есть вещественное число. Соответственно в цикле измененный x будет сравниваться с b, которое является целым