Введение
Командная строка Linux предоставляет мощные инструменты для выполнения арифметических вычислений. Одним из самых универсальных калькуляторов в Linux является bc (Basic Calculator), который позволяет пользователям выполнять как простые, так и сложные математические операции прямо из терминала.
В этом практическом занятии (LabEx) вы научитесь использовать команду bc для выполнения различных арифметических вычислений в Linux. Вы начнете с базовых операций и постепенно перейдете к более сложным выражениям. Навыки, которые вы приобретете, будут полезны для написания скриптов, обработки данных и эффективного решения вычислительных задач в среде Linux.
К концу этого практического занятия вы сможете:
- Выполнять базовые арифметические операции с использованием
bc - Обрабатывать сложные математические выражения с множеством операций
- Использовать переменные и контролировать точность вычислений
- Создавать скрипты, автоматизирующие математические вычисления
Давайте начнем исследовать возможности калькулятора bc в Linux.
Основная арифметика с использованием bc
На этом этапе мы научимся использовать команду bc для выполнения базовых арифметических операций в Linux. Команда bc представляет собой мощный калькулятор, который позволяет выполнять вычисления прямо из терминала.
Установка bc
Сначала убедимся, что калькулятор bc установлен на вашей системе:
sudo apt-get update
sudo apt-get install -y bc
Вы должны увидеть вывод, указывающий на процесс установки. После установки вы можете проверить его работоспособность, введя:
bc --version
Вы должны увидеть информацию о версии калькулятора bc.
Создание простого скрипта для сложения
Теперь создадим простой скрипт для выполнения операции сложения с использованием bc:
- Перейдите в директорию проекта:
cd ~/project
- Создайте новый файл скрипта с именем
simple_calc.sh:
touch simple_calc.sh
- Откройте файл с помощью редактора nano:
nano simple_calc.sh
- Добавьте следующее содержимое в файл:
#!/bin/zsh
## Simple addition using bc
echo "20 + 5" | bc
Сохраните файл, нажав
Ctrl+O, затемEnter, и выйдите из nano с помощьюCtrl+X.Сделайте скрипт исполняемым:
chmod +x simple_calc.sh
- Запустите скрипт:
./simple_calc.sh
Вы должны увидеть следующий вывод:
25
Это демонстрирует, как bc принимает выражение "20 + 5" в качестве входных данных и выдает результат 25.
Понимание работы bc
Команда bc представляет собой калькулятор, ориентированный на работу с конвейерами (pipeline). Мы используем символ вертикальной черты (|), чтобы отправить выражения в bc для вычисления. Базовый синтаксис выглядит так:
echo "expression" | bc
Вы также можете попробовать другие базовые операции:
echo "10 - 3" | bc ## Subtraction
echo "4 * 6" | bc ## Multiplication
echo "15 / 3" | bc ## Division
Запустите эти команды в своем терминале, чтобы увидеть результаты:
echo "10 - 3" | bc
echo "4 * 6" | bc
echo "15 / 3" | bc
Вывод должен быть следующим:
7
24
5
Вычисления с плавающей запятой с использованием bc
На этом этапе мы научимся выполнять вычисления с плавающей запятой с помощью калькулятора bc. По умолчанию bc выполняет целочисленную арифметику, но мы можем использовать параметр scale для контроля десятичного округления.
Понимание параметра scale
Параметр scale в bc определяет количество десятичных знаков, которые будут использоваться в вычислениях. Давайте посмотрим, как он работает:
- Попробуйте эту команду для выполнения деления без установки параметра
scale:
echo "5 / 2" | bc
Вывод будет следующим:
2
Обратите внимание, что результат усекается до целого числа, а не округляется.
- Теперь установим параметр
scale, чтобы получить более точный результат:
echo "scale=2; 5 / 2" | bc
Вывод будет следующим:
2.50
scale=2 сообщает bc вычислить результат с 2 десятичными знаками.
Создание скрипта для сложных вычислений
Создадим скрипт, который демонстрирует использование параметра scale и выполняет более сложные вычисления:
- Перейдите в директорию проекта, если вы еще не там:
cd ~/project
- Создайте новый файл скрипта с именем
complex_calc.sh:
touch complex_calc.sh
- Откройте файл с помощью редактора nano:
nano complex_calc.sh
- Добавьте следующее содержимое в файл:
#!/bin/zsh
## Complex calculation using bc with scale
result=$(echo "scale=2; (10.5 * 4.2) - (5.5 / 2) + 3^2" | bc)
echo "Result: $result"
Этот скрипт:
- Устанавливает параметр
scaleравным 2 десятичным знакам - Выполняет умножение: 10.5 * 4.2
- Выполняет деление: 5.5 / 2
- Вычисляет степень: 3^2 (3 в степени 2)
- Комбинирует эти операции с сложением и вычитанием
- Сохраняет результат в переменную с именем
result - Выводит результат с описательным меткой
Сохраните файл, нажав
Ctrl+O, затемEnter, и выйдите из nano с помощьюCtrl+X.Сделайте скрипт исполняемым:
chmod +x complex_calc.sh
- Запустите скрипт:
./complex_calc.sh
Вы должны увидеть вывод, похожий на следующий:
Result: 46.35
Давайте разберем вычисление:
- 10.5 * 4.2 = 44.1
- 5.5 / 2 = 2.75
- 3^2 = 9
- 44.1 - 2.75 + 9 = 50.35
Подождите, ожидаемый результат должен быть 50.35, но мы получили 46.35. Это произошло потому, что вычисление в скрипте нужно исправить. Давайте исправим его:
nano complex_calc.sh
Обновите вычисление:
#!/bin/zsh
## Complex calculation using bc with scale
result=$(echo "scale=2; (10.5 * 4.2) - (5.5 / 2) + 3^2" | bc)
echo "Result: $result"
## Breaking down the calculation
part1=$(echo "scale=2; 10.5 * 4.2" | bc)
part2=$(echo "scale=2; 5.5 / 2" | bc)
part3=$(echo "3^2" | bc)
echo "Part 1 (10.5 * 4.2): $part1"
echo "Part 2 (5.5 / 2): $part2"
echo "Part 3 (3^2): $part3"
echo "Final: $part1 - $part2 + $part3 = $(echo "scale=2; $part1 - $part2 + $part3" | bc)"
Сохраните изменения и запустите скрипт еще раз:
./complex_calc.sh
Обновленный скрипт покажет разбиение каждого этапа вычисления, что упростит понимание того, как получен итоговый результат.
Работа с переменными в bc
На этом этапе мы научимся использовать переменные в bc, чтобы сделать наши вычисления более гибкими и мощными. Калькулятор bc позволяет нам определять переменные и использовать их повторно в нескольких вычислениях.
Использование переменных в интерактивном режиме bc
Сначала давайте посмотрим, как использовать переменные непосредственно в интерактивном режиме bc:
- Запустите калькулятор
bcв интерактивном режиме:
bc
- Определите переменную и выполните с ней вычисления:
x = 10
x + 5
x * 2
Вы должны увидеть:
15
20
- Вы можете определить несколько переменных и использовать их вместе:
y = 7
x + y
x * y
Вывод будет следующим:
17
70
- Выйдите из интерактивного режима, нажав
Ctrl+Dили введяquit.
Создание скрипта с использованием переменных в bc
Теперь создадим скрипт, который демонстрирует использование переменных в вычислениях bc:
- Перейдите в директорию проекта, если вы еще не там:
cd ~/project
- Создайте новый файл скрипта с именем
variable_calc.sh:
touch variable_calc.sh
- Откройте файл с помощью редактора nano:
nano variable_calc.sh
- Добавьте следующее содержимое в файл:
#!/bin/zsh
## Script to demonstrate using variables in bc
## Define input values
radius=5
height=10
## Calculate cylinder volume (π * r² * h)
volume=$(echo "scale=2; 3.14159 * $radius * $radius * $height" | bc)
## Calculate cylinder surface area (2π * r² + 2π * r * h)
surface_area=$(echo "scale=2; 2 * 3.14159 * $radius * $radius + 2 * 3.14159 * $radius * $height" | bc)
## Display results
echo "Cylinder properties with radius $radius and height $height:"
echo "Volume: $volume cubic units"
echo "Surface Area: $surface_area square units"
Этот скрипт:
- Определяет переменные для радиуса и высоты цилиндра
- Вычисляет объем с использованием формулы π r² h
- Вычисляет площадь поверхности с использованием формулы 2π r² + 2π r * h
- Отображает результаты с соответствующими единицами измерения
Сохраните файл, нажав
Ctrl+O, затемEnter, и выйдите из nano с помощьюCtrl+X.Сделайте скрипт исполняемым:
chmod +x variable_calc.sh
- Запустите скрипт:
./variable_calc.sh
Вы должны увидеть вывод, похожий на следующий:
Cylinder properties with radius 5 and height 10:
Volume: 785.39 cubic units
Surface Area: 471.23 square units
Использование переменных внутри bc
Мы также можем определять и использовать переменные полностью внутри bc с помощью многострочного подхода. Создадим еще один скрипт, чтобы продемонстрировать это:
- Создайте новый файл:
nano bc_variables.sh
- Добавьте следующее содержимое:
#!/bin/zsh
## Script to demonstrate using variables within bc
bc << EOF
scale=2
radius = 5
height = 10
pi = 3.14159
## Calculate cylinder volume
volume = pi * radius^2 * height
print "Volume: ", volume, " cubic units\n"
## Calculate cylinder surface area
surface_area = 2 * pi * radius^2 + 2 * pi * radius * height
print "Surface Area: ", surface_area, " square units\n"
EOF
Этот скрипт:
- Использует "здесь-документ" (EOF), чтобы отправить несколько строк в
bc - Определяет все переменные внутри самого
bc - Выполняет вычисления с использованием этих переменных
- Использует команду
printвbcдля отображения результатов
- Сохраните файл, сделайте его исполняемым и запустите:
chmod +x bc_variables.sh
./bc_variables.sh
Вывод должен быть похожим на вывод предыдущего скрипта, но демонстрирует другой подход к использованию переменных с bc.
Создание практического скрипта калькулятора на bc
На этом последнем этапе мы создадим более практичный скрипт калькулятора, который объединит все концепции, которые мы изучили. Этот скрипт позволит пользователям выполнять различные вычисления, выбирая опции из меню.
Создание интерактивного калькулятора
Давайте создадим скрипт, который будет работать как интерактивный калькулятор:
- Перейдите в директорию проекта, если вы еще не там:
cd ~/project
- Создайте новый файл скрипта с именем
calculator.sh:
touch calculator.sh
- Откройте файл с помощью редактора nano:
nano calculator.sh
- Добавьте следующее содержимое в файл:
#!/bin/zsh
## Interactive calculator script using bc
## Function to calculate area of a circle
calculate_circle_area() {
echo -n "Enter the radius of the circle: "
read radius
area=$(echo "scale=2; 3.14159 * $radius * $radius" | bc)
echo "The area of the circle with radius $radius is: $area square units"
}
## Function to calculate area of a rectangle
calculate_rectangle_area() {
echo -n "Enter the length of the rectangle: "
read length
echo -n "Enter the width of the rectangle: "
read width
area=$(echo "scale=2; $length * $width" | bc)
echo "The area of the rectangle with length $length and width $width is: $area square units"
}
## Function to solve quadratic equation ax² + bx + c = 0
solve_quadratic() {
echo -n "Enter coefficient a: "
read a
echo -n "Enter coefficient b: "
read b
echo -n "Enter coefficient c: "
read c
## Calculate discriminant
discriminant=$(echo "scale=4; ($b * $b) - (4 * $a * $c)" | bc)
## Check the discriminant
if (($(echo "$discriminant < 0" | bc -l))); then
echo "The equation has no real solutions (discriminant < 0)"
elif (($(echo "$discriminant == 0" | bc -l))); then
## One solution
x=$(echo "scale=4; -$b / (2 * $a)" | bc)
echo "The equation has one solution: x = $x"
else
## Two solutions
x1=$(echo "scale=4; (-$b + sqrt($discriminant)) / (2 * $a)" | bc -l)
x2=$(echo "scale=4; (-$b - sqrt($discriminant)) / (2 * $a)" | bc -l)
echo "The equation has two solutions:"
echo "x1 = $x1"
echo "x2 = $x2"
fi
}
## Main program loop
while true; do
echo ""
echo "===== BC Calculator Menu ====="
echo "1. Calculate area of a circle"
echo "2. Calculate area of a rectangle"
echo "3. Solve quadratic equation (ax² + bx + c = 0)"
echo "4. Exit"
echo ""
echo -n "Enter your choice (1-4): "
read choice
case $choice in
1) calculate_circle_area ;;
2) calculate_rectangle_area ;;
3) solve_quadratic ;;
4)
echo "Exiting calculator. Goodbye!"
exit 0
;;
*) echo "Invalid option. Please try again." ;;
esac
done
Этот скрипт:
- Определяет функции для различных типов вычислений
- Предоставляет меню интерфейса для пользователя, чтобы выбрать желаемое вычисление
- Использует
bcдля всех математических операций - Обрабатывает более сложные математические формулы, такие как квадратное уравнение
Сохраните файл, нажав
Ctrl+O, затемEnter, и выйдите из nano с помощьюCtrl+X.Сделайте скрипт исполняемым:
chmod +x calculator.sh
- Запустите скрипт калькулятора:
./calculator.sh
- Попробуйте каждую опцию в меню:
- Выберите опцию 1 и введите радиус, чтобы вычислить площадь круга
- Выберите опцию 2 и введите длину и ширину, чтобы вычислить площадь прямоугольника
- Выберите опцию 3 и введите коэффициенты, чтобы решить квадратное уравнение (попробуйте a=1, b=5, c=6)
- Выберите опцию 4, чтобы выйти из калькулятора
Например, если вы выберете опцию 3 и введете a=1, b=5, c=6, вы должны увидеть вывод, похожий на следующий:
The equation has two solutions:
x1 = -2.0000
x2 = -3.0000
Этот интерактивный скрипт демонстрирует, как bc можно интегрировать в более сложные программы для решения различных математических задач.
Резюме
В этом практическом занятии (лабораторной работе) вы научились использовать командный калькулятор bc в Linux для выполнения различных арифметических операций.
Вот краткое резюме того, что вы достигли:
Основные арифметические операции:
- Установили и проверили работоспособность калькулятора
bc - Создали простой скрипт для выполнения сложения
- Узнали, как использовать оператор конвейера (pipe operator), чтобы отправлять выражения в
bc - Практиковались в выполнении основных операций, таких как сложение, вычитание, умножение и деление
- Установили и проверили работоспособность калькулятора
Вычисления с плавающей точкой:
- Использовали параметр
scaleдля контроля десятичного округления - Создали скрипт для более сложных вычислений, включающих несколько операций
- Поняли порядок выполнения операций и как использовать скобки для управления порядком вычислений
- Использовали параметр
Работа с переменными:
- Использовали переменные оболочки (shell variables) в вычислениях с
bc - Исследовали интерактивный режим
bcдля определения и использования переменных - Создали скрипты, которые используют переменные для более гибких вычислений
- Узнали, как использовать "здесь-документы" (here documents) для многострочных операций в
bc
- Использовали переменные оболочки (shell variables) в вычислениях с
Практические приложения:
- Создали интерактивный скрипт калькулятора с меню интерфейса
- Реализовали общие геометрические вычисления
- Решили более сложные уравнения, такие как квадратные формулы
- Объединили все изученные концепции в полезное приложение
Эти навыки позволяют вам эффективно выполнять математические операции в командной строке Linux и автоматизировать вычисления в своих скриптах. Калькулятор bc - это мощный инструмент, который может справиться со всеми от простой арифметики до сложных математических формул, что делает его важной утилитой для системных администраторов, разработчиков и аналитиков данных, работающих в среде Linux.
По мере дальнейшей работы с Linux вы заметите, что сочетание командной строки инструментов, таких как bc, с оболочным скриптингом (shell scripting) может помочь вам более эффективно решать широкий спектр задач.



