работа с числами (bc, dc, expr) – Weril
http://www.basicallytech.com/blog/?/archives/23-command-line-calculations-using-bc.html – примеры расчета простых выражений с помощью bc.
expr и let – базовые целочисленные калькуляторы. Поддерживают операции сложения/деления/умножения/вычитания.
EXPR
$ expr 6 + 2
8$ expr 6 - 2
4$ expr 6 \* 2
12$ expr 6 / 2
3$ expr 6 / 5
1LET
let "b = $a * 2"
let "b = $a - 2"
bc (basic calculator) — интерактивный интерпретатор Си-подобного языка, позволяет выполнять вычисления с произвольно заданной точностью. Часто используется как калькулятор в командной строке UNIX-подобных операционных систем.
echo '57+43' | bc # addition
echo '57-43' | bc # subtraction
echo '57*43' | bc # multiplication
HEX/DEC/BIN CONVERSION (преобразование между системами счисления)
Можно использовать bc для конвертации между системами.
DEC_SEPARATED_1=$(echo «ibase=16; $HEX_SEPARATED_1» | bc)
DEC_SEPARATED_2=$(echo «ibase=16; $HEX_SEPARATED_2» | bc)
echo «$DEC = $HEX = $DEC_SEPARATED_1/$DEC_SEPARATED_2»
IF numbers (float compare)
IF встроенный в bash умеет работать только с целыми числами. Для обхода этого ограничения следует использовать bc. К примеру, если нам нужно сравнить два числа с запятой, мы их сравниваем посредством bc, который выдает результат 1/0, а далее, посредством IF = 1 мы делаем то или иной действие. Использовал данную фичу в скрипте для сравнения полученного значения TX/RP-Power с эталонным.
Bash does not understand floating point arithmetic. It treats numbers containing a decimal point as strings.
$ echo "1.2 > 1.1" | bcPosted on Author werilCategories bc, dc, expr
1$ echo "1.2 > 1.3" | bc
0COMPARE_RESULT_THROUGH_BC=$(echo "$TX_Power_mW > $TX_POWER_HIGH" | bc)
if [[ $COMPARE_RESULT_THROUGH_BC -eq 1 ]]; then
:some_code:
fi
Примеры использования команды bc в Linux
Команда Linux bc
(Basic Calculator) — утилита командной строки, действующая как научный калькулятор с выполнением математических вычислений произвольной точности.
Содержание
- Установка
- Синтаксис
- Опции
- Принцип работы утилиты
- Использование команды bc в Linux
- Интерактивный режим
- Использование в качестве калькулятора
- Десятичные дроби
- Ввод из команды echo
- Преобразование десятичного числа в двоичное
- Вычисление из файла
Установка
Команда bc
вероятнее всего в вашем дистрибутиве отсутствует. Устанавливается она очень просто.
В Ubuntu:
$ sudo apt install bc
В Arch Linux:
$ yay -S bc
Синтаксис
bc [опции] [файл]
Опции
- -i —interactive
- Включить интерактивный режим
- -l —mathlib
- Определение математической библиотеки перед обработкой файлов
- -q —quiet
- Запуск команды без вывода приветствия GNU
- -s —standard
- Нестандартные конструкции команды являются ошибками
- -w —warn
- Предупреждать о нестандартных конструкциях команды
Хотя команда работает с произвольной точностью, по умолчанию команда использует ноль цифр после запятой, если только не указан флаг -l
или не задана переменная scale
.
Принцип работы утилиты
Команда bc
работает, обрабатывая код из всех файлов, указанных в командной строке, в том порядке, в котором файлы перечислены. После обработки файлов утилита начинает чтение со стандартного ввода, выполняя весь код по мере его чтения. Команда не читается из стандартного ввода, если файл содержит команду для остановки процессора.
При указании входных файлов убедитесь, что это текстовые файлы, содержащие последовательность команд, операторов или определений функций, которые могут быть прочитаны и выполнены командой. Команда позволяет пользователям определить математическую библиотеку перед обработкой файлов с помощью параметра -l
.
Хотя команда bc
работает с произвольной точностью, по умолчанию команда использует ноль цифр после запятой, если только не указана опция -l
или переменная scale
не задана вручную. Флаг -l
устанавливает переменную scale
на 20 знаков после запятой. , а также:
- Арифметические операторы
- Операции увеличения и уменьшения
- Операторы присваивания
- Сравнение и реляционные операции
- Логические и логические операции
- Математические функции
- Условные утверждения
- Повторяющиеся утверждения
- C-подобные комментарии, которые начинаются
/*
и заканчиваются на*/
Некоторые поддерживаемые основные и специальные выражения:
- length (expression)
- Значение функции длины — это количество значащих цифр в выражении
- read ( )
- Функция
read
считывает число со стандартного ввода, независимо от того, где происходит функция (используйте с осторожностью, так как это может вызвать проблемы из-за смешивания данных и программы в стандартном вводе) - scale (expression)
- Количество цифр после запятой в выражении представляет собой значение функции
scale
- sqrt (expression)
- Квадратный корень выражения является значением функции
sqrt
- ++ var
- Увеличивает переменную на единицу, а новое значение является результатом выражения
- var ++
- Результатом выражения является значение переменной, и затем переменная увеличивается на единицу
- — var
- Уменьшает переменную на единицу, а затем сохраняет новое значение переменной
- var —
- Результатом выражения является значение переменной, а затем переменная уменьшается на единицу
- ( expr )
- Скобка изменяет стандартный приоритет и принудительно оценивает выражение
- var = expr
- Переменной
var
присваивается значение выражения
Использование команды bc в Linux
Интерактивный режим
Для входа в интерактивный режим достаточно вызвать команду без указания файлов:
oleg@mobile:~:$ bc bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.
Команда переходит в интерактивный режим и ожидает ввода.
По умолчанию утилита принимает нулевые цифры после десятичной точки. В качестве примера выполняем деление 1/3
:
oleg@mobile:~:$ bc bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1/3 0
Вы можете установить масштаб по умолчанию до 20 после десятичной точки и также определить стандартную математическую библиотеку. Для этого команда запускается с опцией -l
. В качестве примера выполняем деление 1/3
:
oleg@mobile:~:$ bc -l bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1/3 .33333333333333333333
По окончании вычислений выйдите из интерактивной оболочки, нажав Ctrl + D или выполнив:
oleg@mobile:~:$ quit
Использование в качестве калькулятора
Команда bc
может действовать как калькулятор на основе интерфейса командной строки для простых математических операций: сложение, вычитание, деление и умножение. Поддерживаются также и различные расширенные математические функции: синус, косинус, тангенс, натуральные логарифмы.
Запускаем команду и проверяем некоторые математические операции:
oleg@mobile:~:$ bc bc 1.07.1 ... 22+47 69 12*8 96
Десятичные дроби
При работе с десятичными знаками команда по умолчанию использует ноль цифр после запятой. Однако можно настроить её поведение, определив значение переменной scale
, либо указав опцию
при выполнении команды.
Для примера делим 10/3
без установки переменной scale
, а затем установив значение scale = 2
:
oleg@mobile:~:$ bc ... 10/3 3 scale =2 10/3 3.33
В первом случае цифры после десятичной точки не были показаны, а во втором — сохранены два десятичных разряда.
Ввод из команды echo
Повторяем предыдущее вычисление с тем же значением переменной:
oleg@mobile:~:$ echo "scale=2;10/3" | bc 3.33 oleg@mobile:~:$
Преобразование десятичного числа в двоичное
Для примера преобразуем десятичное число 10
в двоичное, используя команду echo
и переменную obase
:
oleg@mobile:~:$ echo 'obase=2;10' | bc 1010 oleg@mobile:~:$
Вычисление из файла
Создадим простой текстовый файл calc.txt
со следующим содержимым:
oleg@mobile:~:$ cat calc.txt 10/3 12+7 25*3 47-14 oleg@mobile:~:$
Передаём содержимое файла команде bc
с опцией -l
для увеличения точности вычислений:
oleg@mobile:~:$ bc -l calc.txt ... 3.33333333333333333333 19 75 33
Заключение
Здесь были представлены простейшие примеры использования в Linux команды bc
для математических вычислений. Это лишь малая толика того, что может выполнять эта утилита.
bc в Linux с примерами
Улучшить статью
Сохранить статью
Нравится Статья Команда
bc используется для калькулятора командной строки. Это похоже на базовый калькулятор, с помощью которого мы можем выполнять основные математические вычисления.
Арифметические операции являются самыми основными в любом языке программирования. Операционная система Linux или Unix предоставляет команду bc и команду expr 9.0014 для выполнения арифметических вычислений. Вы можете использовать эти команды в сценариях bash или shell также для вычисления арифметических выражений.
Синтаксис:
bc [-hlwsqv] [длинные параметры] [файл ...]
Опции: Как сохранить результат полной операции в переменной? Пример: Объяснение: Сохраняет результат первой строки ввода в переменной x, а затем отображает переменную x как $x . 2. Операторы присваивания Объяснение: возводит в квадрат значение переменной и выводит значение на терминал. Как сохранить результат полной операции в переменной? Пример: Объяснение: Сохраняет результат 500 по модулю 7, т.е. остаток 500/7, в переменной x, а затем отображает переменную x как $x . 3. Операторы приращения Примеры: Объяснение: Сначала увеличивается переменная, а затем сохраняется результат переменной. Объяснение: Сначала используется результат переменной, а затем переменная увеличивается. 4. Операторы уменьшения Примеры: Объяснение: Сначала переменная уменьшается, а затем сохраняется результат переменной. Объяснение: Сначала используется результат переменной, а затем переменная уменьшается. 5. Операторы сравнения или отношения Список операторов отношения, поддерживаемых командой bc, показан ниже: Примеры: 6. Логические или логические операторы Примеры: 7. Математические функции В дополнение к математическим функциям также поддерживаются следующие функции: Примеры: Объяснение: Присвойте значение «pi» переменной оболочки pi. Здесь a относится к функции арктангенса, которая является частью математической библиотеки, загружаемой с параметром -l. Объяснение: Дает количество знаков после запятой в значении «пи», рассчитанном в предыдущем примере. Объяснение: Выдает значения синуса при угле «пи/3». Угол должен быть в радианах. Здесь s относится к синусоидальной функции Объяснение: Выдает значения косинуса при угле «пи/3». Объяснение: Дает натуральный логарифм значения, т.е. основание «е». Объяснение: Преобразование десятичного числа в двоичное. Объяснение: Преобразование десятичного числа в восьмеричное. Объяснение: Преобразование двоичного числа в десятичное. Объяснение: Преобразование двоичного числа в восьмеричное. 8. Условные операторы Условные операторы используются для принятия решений и выполнения операторов на основе этих решений. Команда bc поддерживает условие if. Синтаксис: Пример: 9. Операторы итерации Синтаксис: Примеры: Объяснение: В обоих примерах печатаются числа от 1 до 10 с использованием соответствующего синтаксиса цикла. 10. Функции : Функции обеспечивают метод определения вычисления, которое может быть выполнено позже. Функции в bc всегда вычисляют значение и возвращают его вызывающей стороне. Определения функций являются «динамическими» в том смысле, что функция не определена до тех пор, пока определение не встретится на входе. Затем это определение используется до тех пор, пока не встретится другая функция определения для того же имени. Затем новое определение заменяет старое определение. Синтаксис: 11. Мы можем записать наши арифметические выражения в файл, а затем выполнить эти операторы, предоставив имя файла команде bc. Пример: ВО ИЗБЕЖАНИЕ СОЗДАНИЯ СИСТЕМОЙ СООБЩЕНИЯ НА ЭКРАНЕ ВЫВОДА, ИСПОЛЬЗУЙТЕ: 12. Важные моменты: Эта статья предоставлена Аканш Гупта . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу [email protected]. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше. По Джаянт Верма / 20 ноября 2020 г. Команда bc , сокращенно от базового калькулятора, — это язык, который поддерживает числа произвольной точности с интерактивным выполнением операторов. Его синтаксис похож на синтаксис языка программирования C. Он имеет два основных приложения. Один как математический язык сценариев и второй как интерактивная математическая оболочка . В этом уроке мы узнаем, как использовать команду bc для выполнения математических, логических и логических операций. Для входа в интерактивную математическую оболочку введите: Нажмите Введите . Теперь можно приступить к выполнению математических операций. Давайте попробуем некоторые: Результат: Давайте попробуем другой: Результат: Вот некоторые другие операции: Вы можете использовать команду bc для вычисления математических операций без входа в интерактивную математическую оболочку. Для выполнения математических операций и вывода результата можно использовать команду echo вместе с bc. Синтаксис для этого: Вывод: Попробуем еще: Вывод: Вот еще один: Вывод: Вы можете установить количество знаков после запятой, изменив значение параметра шкалы . Синтаксис для этого: Выход: Попробуем другое значение масштаба. Вывод: Вы также можете ввести данные из файла. Для этого давайте создадим файл с несколькими строками математических операций. Мы будем использовать команду cat для создания файла. Текст файла следующий: Чтобы передать этот файл в качестве входных данных для команды bc, используйте: Вывод: Bc также позволяет конвертировать числа из одной системы счисления в другую. Чтобы преобразовать двоичное число в десятичное число , вы можете использовать: Вывод: Попробуем еще: Вывод: Для преобразования десятичного числа в двоичное число вы можете использовать: Вывод: Попробуем еще: Вывод: Поскольку bc также является математическим языком сценариев, вы можете объявлять переменные для выполнения математических операций. Синтаксис для этого: Вывод: Попробуем еще: Вывод: Вы также можете использовать команду bc для выполнения логических операций.
-h 90 014 , {- -help } : Распечатать использование и выйти
-i , {- -interactive } : включить интерактивный режим
-l , {- -mathlib } : определить стандартную математическую библиотеку
-w , {- -warn } : Выдавать предупреждения для расширений POSIX bc
-s , {- -standard } : Обрабатывать точно язык POSIX bc
-q , {- -quiet } : Не печатать нормальный GNU bc welcome
-v , {- -version } : вывести номер версии и авторские права и выйти Ввод:
$ x=`эхо "12+5" | до н.э.
$ echo $x
Вывод:17
Список поддерживаемых операторов присваивания: Ввод:
$ x=`echo "var=500;var%=7;var" | до н.э.
$ echo $x
Вывод:3
Существует 2 типа операторов приращения: Ввод: $ echo "var=10;++var" | До нашей эры
Вывод: 11
Ввод: $ echo "var=10;var++" | До нашей эры
Вывод: 10
Существует 2 вида операторов уменьшения: Ввод: $ echo "var=10;--var" | До нашей эры
Вывод: 9
Ввод: $ echo "var=10;var--" | До нашей эры
Вывод: 10
Операторы отношения используются для сравнения двух чисел. Если сравнение верно, то результат равен 1 . В противном случае (false) возвращает 0 . Эти операторы обычно используются в условных операторах, таких как , если . Ввод: $ echo "10>5" | До нашей эры
Выход: 1
Ввод: $ эхо "1==2" | До нашей эры
Вывод: 0
Логические операторы в основном используются в условных операторах. Результатом логических операций является либо 1 (ИСТИНА) или 0 (ЛОЖЬ). Ввод: $ echo "10 && 5" | До нашей эры
Выход: 1
Ввод: $ эхо "0 || 0" | До нашей эры
Выход: 0
Ввод: $ эхо "! 0" | До нашей эры
Вывод: 1
Поддерживаются следующие встроенные математические функции: По умолчанию для ввода и вывода используется основание 10.
Ввод:
$ pi=`echo "h=10;4*a(1)" | до н.э. -l`
$ эхо $ пи
Вывод: 3,14159265358979323844
Ввод: $ echo "масштаб($pi)" | до н.э. -l
Вывод: 20
Ввод: $ echo "s($pi/3)" | до н.э. -l
Вывод: .86602540378443864675
Ввод: $ echo "c($pi/3)" | до н.э. -l
Вывод: .50000000000000000001
Угол должен быть в радианах. Здесь c относится к функции косинуса. 9значение в качестве вывода.
Ввод: $ echo "l(e(1))" | до н.э. -l
Вывод: .99999999999999999999
Ввод: $ echo "obase=2;15" | до н.э. -l
Вывод: 1111
Ввод: $ echo "obase=8;9" | до н.э. -l
Вывод: 11
Ввод: $ echo "ibase=2;1111" | до н.э. -l
Вывод: 15
Ввод: $ echo "ibase=2;obase=8;10" | до н.э. -l
Вывод: 2
if( условие ) {операторы} else {операторы}
Ввод: $ echo 'n=8;m=10;if(n>m) вывести "n больше" иначе вывести "m больше" ' | до н.
э. -l
Выходные данные: m больше
Команда bc поддерживает циклы for и while для выполнения итераций. for( назначение; условие; обновление )
{
заявления.....
.......
........
}
ИЛИ
пока( условие )
{
заявления.....
.......
........
}
Ввод: $ echo "for(i=1; i<=10; i++) {i;}" | До нашей эры
Выход:
1
2
3
4
5
6
7
8
9
10
Ввод: $ echo "i=1;while(i<=10) {i; i+=1}" | До нашей эры
Выход:
1
2
3
4
5
6
7
8
9
10
Some Псевдооператоры : (это расширение).
определить имя ( параметры )
{
заявления.......
.......
........
оператор возврата
}
Ввод:
$ кошка >> пример.
txt
2+5;
вар = 10*3
вар
печать вар
покидать
Нажмите Ctrl+D
$BC пример.txt
Выход:
до н.э. 1.06.95
Авторское право 1991–1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
Это бесплатное программное обеспечение АБСОЛЮТНО БЕЗ ГАРАНТИЙ.
Для получения подробной информации введите «гарантия».
7
30
$ bc -q example.txt
Вывод:
7
30
Команда bc в Linux - Как выполнять математические операции в Linux Shell?
Как использовать команду bc в качестве интерактивной математической оболочки?
Как использовать команду bc вместе с командой echo?
эхо "3+9" | До нашей эры
эхо "3*9" | До нашей эры
эхо "3/9" | До нашей эры
Как изменить количество цифр после запятой?
эхо 'масштаб=25;100/23' | До нашей эры
4.
3478260869565217391304347
эхо 'масштаб=10;100/23' | До нашей эры
4.3478260869
Масштаб Как обеспечить ввод из файла?
кот > bc_calc.txt
5+7
7*7
20/5
до н.э. < bc_calc.txt
12
49
4
Как преобразовать двоичную систему в десятичную?
.
'ibase=2;obase=A;11' | До нашей эры
'ibase=2;obase=A;111' | До нашей эры
Как преобразовать десятичный в двоичный?
'ibase=10;obase=2;3' | До нашей эры
'ibase=10;obase=2;7' | До нашей эры
Как объявить переменные в bc?
эхо "х=15; х+=10;х" |bc
эхо "х=15; х*=10;х" |bc
Как выполнять логические операции под командой bc?