dec=`echo "ibase=$ibase; $number" | bc` # ==> 'bc' используется как калькулятор.
[0-9]*) ;; # все в порядке
*) continue;; # ошибка: игнорировать
# Напечатать все преобразования в одну строку.
# ==> 'вложенный документ' -- список команд для 'bc'.
-h) Usage;; # ==> Вывод справочного сообщения.
*) break;; # первое число
esac # ==> Хорошо бы расширить анализ вводимых символов.
Один из вариантов вызова bc -- использование вложенного документа, внедряемого в блок с подстановкой команд. Это особенно актуально, когда сценарий должен передать bc значительный по объему список команд и аргументов.
variable=`bc << LIMIT_STRING
variable=$(bc << LIMIT_STRING
Пример 12-34. Пример взаимодействия bc со "встроенным документом"
# 'вложенным документом'.
# запись $( ... ) тоже работает.
# Возвращается значение синуса от 1.7 радиана.
# Ключом "-l" вызывается математическая библиотека 'bc'.
hyp= # Объявление глобальной переменной.
hypotenuse () # Расчет гипотенузы прямоугольного треугольника.
sqrt ( $1 * $1 + $2 * $2 )
# К сожалению, функции Bash не могут возвращать числа с плавающей запятой.
echo "гипотенуза = $hyp" # 8.184039344
Пример 12-35. Вычисление числа "пи"
# cannon.sh: Аппроксимация числа "пи".
# Это очень простой вариант реализации метода "Monte Carlo",
#+ математическое моделирование событий реальной жизни,
#+ для эмуляции случайного события используются псевдослучайные числа.
# Допустим, что мы располагаем картой квадратного участка поверхности со стороной квадрата 10000 единиц.
# На этом участке, в центре, находится совершенно круглое озеро,
#+ с диаметром в 10000 единиц.
# Т.е. озеро покрывает почти всю карту, кроме ее углов.
# (Фактически -- это квадрат со вписанным кругом.)