Linux bash математические операции

Содержание
  1. 12.8. Команды выполнения математических операций
  2. Глава 8. Операции и смежные темы
  3. Занимательная математика командной строки
  4. bash калькулятор целочисленный
  5. bc мэдскиллз
  6. Замер производительности процессора с bc
  7. Скрипты bc
  8. awk: арифмометр и гадалка
  9. В заключение
  10. Математика в BASH с помощью bc
  11. Использование bc для базовых операций:
  12. Округление результата
  13. Если же у Вас есть файл с набором математических операций
  14. Использование результата последней операции:
  15. Тригонометрические функции:
  16. Создание переменных на основе результатов вычислений:
  17. You May Also Enjoy
  18. Jenkins auth over AWS Cognito
  19. Copy the Jenkins job
  20. Установка nginx из исходников
  21. Уникальные IP адреса в access.log Apache
  22. Использование арифметических операторов в сценариях Bash
  23. Выполнение сложения и вычитания в сценариях bash
  24. Выполнение умножения и деления в сценариях bash
  25. Использование power и остатка (по модулю)
  26. Время практики: создание сценария bash для конвертера степеней

12.8. Команды выполнения математических операций

Разложение целого числа на простые множители.

Bash не в состоянии выполнять действия над числами с плавающей запятой и не содержит многих важных математических функций. К счастью существует bc.

Универсальная, выполняющая вычисления с произвольной точностью, утилита bc обладает некоторыми возможностями, характерными для языков программирования.

Синтаксис bc немного напоминает язык C.

Поскольку это утилита UNIX, то она может достаточно широко использоваться в сценариях на языке командной оболочки, в том числе и в конвейерной обработке данных.

Ниже приводится простой шаблон работы с утилитой bc в сценарии. Здесь используется прием подстановки команд.

Пример 12-32. Ежемесячные выплаты по займу

Пример 12-33. Перевод чисел из одной системы счисления в другую

Один из вариантов вызова bc — использование вложенного документа, внедряемого в блок с подстановкой команд. Это особенно актуально, когда сценарий должен передать bc значительный по объему список команд и аргументов.

Пример 12-34. Пример взаимодействия bc со «встроенным документом»

Пример 12-35. Вычисление числа «пи»

Утилита dc ( desk calculator) — это калькулятор, использующий «Обратную Польскую Нотацию», и ориентированный на работу со стеком.

Многие стараются избегать испоьзования dc, из-за непривычной формы записи операндов и операций. Однако, dc имеет и своих сторонников.

Пример 12-36. Преобразование чисел из десятичной в шестнадцатиричную систему счисления

Изучение страниц info dc позволит детальнее разобраться с утилитой. Однако, отряд «гуру», которые могут похвастать своим знанием этой мощной, но весьма запутанной утилиты, весьма немногочислен.

Пример 12-37. Разложение числа на простые множители

Еще один способ выполнения математических операций, над числами с плавающей запятой, состоит в создании сценария-обертки, использующего математические функции awk.

Пример 12-38. Расчет гипотенузы прямоугольного треугольника

Источник

Глава 8. Операции и смежные темы

присваивание

Инициализация переменной или изменение ее значения

Универсальный оператор присваивания, пригоден как для сравнения целых чисел, так и для сравнения строк.

Пусть вас не смущает, что оператор присваивания ( «=» ), по своему внешнему виду, совпадает с оператором сравнения (=).

арифметические операторы

возведение в степень

модуль (деление по модулю), возвращает остаток от деления

Этот оператор может применяться в алгоритмах генерации псевдослучайных чисел в заданном диапазоне (см. Пример 9-23 и Пример 9-25), для форматирования вывода на экран (см. Пример 25-10 и Пример A-7), и даже для генерации простых чисел (см. Пример A-18). На удивление часто операцию деления по модулю можно встретить в различных численных алгоритмах.

Пример 8-1. Наибольший общий делитель

«плюс-равно» (увеличивает значение переменной на заданное число)

let «var += 5» значение переменной var будет увеличено на 5.

«минус-равно» (уменьшение значения переменной на заданное число)

«умножить-равно» (умножить значение переменной на заданное число, результат записать в переменную)

let «var *= 4» значение переменной var будет увеличено в 4 раза.

«слэш-равно» (уменьшение значения переменной в заданное число раз)

«процент-равно» (найти остаток от деления значения переменной на заданное число, результат записать в переменную)

Арифметические операторы очень часто используются совместно с командами expr и let.

Пример 8-2. Арифметические операции

Целые числа в Bash фактически являются знаковыми длинными целыми (32-бит), с диапазоном изменений от -2147483648 до 2147483647. Если в результате какой либо операции эти пределы будут превышены, то результат получится ошибочным.

Bash ничего не знает о существовании чисел с плавающей запятой. Такие числа, из-за наличия символа десятичной точки, он воспринимает как строки.

Для работы с числами с плавающей запятой в сценариях можно использовать утилиту-калькулятор bc.

битовые операции. Битовые операции очень редко используются в сценариях командного интерпретатора. Их главное назначение, на мой взгляд, установка и проверка некоторых значений, читаемых из портов ввода-вывода и сокетов. «Битовые операции» гораздо более уместны в компилирующих языках программирования, таких как C и C++.

битовые операции

сдвигает на 1 бит влево (умножение на 2)

let «var var сдвигается влево на 2 бита (умножается на 4)

сдвиг вправо на 1 бит (деление на 2)

«сдвиг-вправо-равно» (имеет смысл обратный )

Источник

Занимательная математика командной строки

Если вы пользователь Linux, Free/Open BSD или другой свободной ОС, есть вероятность, что интерфейс командной строки вам не чужд. В таком случае можно использовать командную оболочку для простых арифметических действий. Для этого не нужно устанавливать дополнительных программ, все уже есть в базовом наборе операционной системы. Они позволяют качественно заменить привычный калькулятор на столике счетовода.

bash калькулятор целочисленный

Арифметические операции с целочисленными в bash будут выглядеть так:

На man странице bash , в разделе ARITHMETIC EVALUATION вы можете ознакомиться с приоритетом исполнения действий операторов. И, кстати, можно получить тот же результат, используя команду expr целочисленное выражение , вместо подстановки с двойными скобками в командах вывода.

bc мэдскиллз

Целочисленные выражения это конечно хорошо, но как-то маловато даже для калькулятора. Благо в наборе есть еще bc — Си-подобный интерактивный интерпретатор. Не будем тратить время на сложение и вычитание, перейдем сразу к более интересным занятиям.

Это уже получше калькулятора, так как позволяет получить любое количество чисел в дробной части с помощью переменной scale . Остерегайтесь поддельных проприетарных версий bc , так как они поддерживают всего-лишь 99 знаков после запятой!

Еще 2 важные переменные: ibase и obase указывают на основание входящих и исходящих чисел.

Тут, кстати, есть засада. Посмотрите на эти два примера. Вроде бы пытаешься сделать то же самое, но результат разный. Вся суть в том, что в первом примере ibase=2 , но сама obase=10 принимает значение 2 в силу того, что ibase определяет по базе obase и 10 становится равной 2. Чтобы разорвать этот круг, надо использовать hex.

При множественном возведении числа в степень важно расставить нужным образом скобки, ибо bc правоассоциативна и результат может быть не тот, на который вы рассчитывали.

Помимо этих художеств, bc имеет еще интерактивный режим в котором пищит и все портит делает все то же самое, но уже напрямую, без конвейера. Ключ -q нужен, чтобы подавить гнушное приветствие.

Замер производительности процессора с bc

Много лун назад на одном популярном англоязычном форуме, ныне покойном, предложили гениально простой способ нагреть проц и посчитать его скорость в попугаях.

Мы подгружаем в bc математическую библиотеку опцией -l и просим выдать число π с точностью 5000 знаков после запятой. Мой результат вычисления на Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz :

Скрипты bc

В bc можно, если очень нужно, определять функции и запускать скрипты. Определение функции имеет следующий синтаксис:

Определены условные операторы if и else , причем последний не обязательно использовать, а также заголовки цикла for и while . На Википедии можно просмотреть список математических операторов и сравнить с таковым в Си. А вот так выглядит расчет чисел Фибоначчи в bc .

Как ЯП bc не взлетел, однако, в качестве настольного калькулятора он более чем хорош.

awk: арифмометр и гадалка

Мне не часто доводилось пользоваться awk , поэтому каждый раз я с удивлением обнаруживаю новые возможности этой программы. Если нужно посчитать логарифмы или синусы, не спешите паниковать, man awk вам поможет. Вот так мы получили квадратный корень.

А вот мы уже логарифмируем число π, 5000 знаков которого мы уже вычисляли с помощью bc .

Оглашаю полный список возможностей

Иногда, хочется довериться судьбе и послать все на три буквы — awk. Вообще-то, это пример из книги издательства O’Reilly, имитирует бросание монетки, выдавая 2 разных события пить или не пить с одинаковой вероятностью.

В заключение

В нашей математической мастерской.еще очень много разных программ и если тема взлетит, попробуем перейти в первую и высшую лигу математического ПО с открытыми исходниками.

I. Замена калькулятора

  1. Встроенные средства командной оболочки: арифметические подстановки bash .
  2. Программа GNU bc .
  3. Неформат — awk .

  1. OpenOffice / LibreOffice Calc .
  2. KDE KSpread .
  3. GNOME Gnumeric .
  4. Одиночные, например: GNU Oleo и другие.

III. Специализированные математические программы, уровень студент+

IV. Языки программирования, математические библиотеки и среды

  1. Ansi C , библиотеки math.h, complex.h, GSL и другие товарищи.
  2. Java Scientific Library
  3. Python , библиотеки SciPy, NumPy, Sympy и другие товарищи.
  4. COBOL .
  5. Fortran .
  6. Intel Math Kernel Library (Intel MKL)
  7. AMD Accelerated Parallel Processing Math (APPLM)
  8. AMD Core Math Library (ACML)

Список, естественно не полный, поэтому заранее прошу прощение, если не указал чей-то излюбленный математический пакет или ЯП. Последняя группа — поистине разливанное море разнообразного и годного софта.

А вот и обещанный мэдскиллз вместе с ответом на вопрос из картинки. Источник.

Источник

Математика в BASH с помощью bc

bc — это язык, который поддерживает числа произвольной точности с интерактивным исполнения отчетности.
Безусловно, bc — один из аутсайдеров, когда дело доходит до расчетов по командной строке.

Главным достоинством bc является обработка чисел с запятой (float). В среде bash можно проводить обычные операции (сложение, вычитание, деление и умножение) с целыми числами, но без bc не обойтись, когда дело доходит до десятичных дробей.

Дальше приводится несколько примеров использования bc:

Использование bc для базовых операций:

как всегда, можно использовать echo + | :

bc , как положено, соблюдает приоритетность математических операций. Проверьте:

Округление результата

В случае выполнения операции деления из примера bc вернет 1. Для того что бы показать цифры после запятой нужно указать сколько их нужно с помощью scale (по умолчанию = 0):

Если же у Вас есть файл с набором математических операций

воспользуйтесь слудющей конструкцией:

Использование результата последней операции:

Вместо last можно использовать точку:

Получение квадратного корня и возведение в степень
sqrt вернет квадратный корень из числа. Если результат является десятичной дробью — используйте scale для отображения знаков после запятой.

Довольно странно, что у библиотеки, написанной на C не предусмотрено использование sqr, но все же его нету.

Пример возведения в степень:

Тригонометрические функции:

Сомневаюсь, что кто-то будет в скриптах использовать значение косинуса или натурального логарифма числа, но все же:

  • s (x) Синус x. x задается в радианах.
  • c (x) Косинус x. x задается в радианах.
  • l (x) Натуральный логарифм x

Создание переменных на основе результатов вычислений:

В этой статье bc используется для определения места, которое занимают базы даных mysql.

Updated: January 27, 2015

You May Also Enjoy

Jenkins auth over AWS Cognito

Jenkins auth over AWS Cognito

Copy the Jenkins job

Copy the Jenkins job

Установка nginx из исходников

В разных случаях приходится компилировать ПО имея его исходники. Опять же хочу разводить демагогию на эту тему. Хочу рассказать как собрать nginx последней в.

Уникальные IP адреса в access.log Apache

Получить список уникальных IP адресов в лог файле вэбсервера Apache можно с помощью:

Источник

Использование арифметических операторов в сценариях Bash

Главное меню » Linux » Использование арифметических операторов в сценариях Bash

При написании сценариев bash вы часто обнаруживаете, что хотите выяснить результат арифметических вычислений, чтобы определить оставшееся дисковое пространство, размеры файлов, срок действия пароля, количество хостов, пропускную способность сети и т. д.

В этой главе серии статей о bash для начинающих вы научитесь использовать операторы bash для выполнения различных арифметических вычислений.

Чтобы освежить вашу память, вот арифметические операторы в bash:

оператор Описание
+ прибавление
субстракция
* умножение
/ целочисленное деление (без десятичных чисел)
% деление модуля (дает только остаток)
** возведение в степень (x в степени y)

Выполнение сложения и вычитания в сценариях bash

Давайте создадим bash-скрипт с именем add.sh , который просто добавит два размера файла (в байтах) и отобразит результат.

К настоящему времени вы должны быть знакомы с аргументами в сценариях bash. Надеюсь, вы также знакомы с командами cut и du.

Команда du дает вам размер файла. В выводе указывается как размер файла, так и имя файла. Здесь команда cut используется для извлечения первого столбца (т.е. размера файла) из вывода. Выходные данные команды du передаются команде cut с использованием перенаправления конвейера.

Обратите внимание, что вы передадите два имени файла в качестве аргументов сценарию. Например, здесь мы запускаем сценарий и передаю два файла /etc/passwd и /etc/group в качестве аргументов:

Наиболее важное направление в сценарии addition.sh:

Где вы использовали оператор + для сложения двух чисел $fs1 и $fs2. Также обратите внимание, что для вычисления любого арифметического выражения вы должны заключить его в двойные круглые скобки следующим образом:

Вы также можете использовать оператор минус (-) для вычитания. Например, значение под-переменной в следующем операторе будет равно семи:

Выполнение умножения и деления в сценариях bash

Давайте создадим сценарий bash с именем giga2mega.sh, который преобразует гигабайты (ГБ) в мегабайты (МБ):

Теперь давайте запустим скрипт, чтобы узнать, сколько мегабайт в четырех гигабайтах:

Здесь мы использовали оператор умножения (*), чтобы умножить количество гигабайт на 1024, чтобы получить эквивалент в мегабайтах:

В этот скрипт легко добавить дополнительные функции для преобразования гигабайт (ГБ) в килобайты (КБ):

Мы позволим вам преобразовать гигабайты в байты в качестве практического упражнения!

Вы также можете использовать оператор деления (/), чтобы разделить два числа. Например, значение переменной div в следующем операторе будет равно пяти:

Обратите внимание, что это целочисленное деление, поэтому все дроби теряются. Например, если вы разделите 5 на 2, вы получите 2, что, конечно, неверно:

Чтобы получить десятичный вывод; вы можете использовать команду bc. Например, чтобы разделить 5 на 2 с помощью bc команды, вы можете использовать следующий оператор:

Обратите внимание, что вы можете использовать и другие операторы с bc командой всякий раз, когда имеете дело с десятичными числами.

Использование power и остатка (по модулю)

Создадим калькулятор мощности! Мы собираемся создать скрипт с именем power.sh, который будет принимать два числа a и b (в качестве аргументов) и будет отображать результат возведения a в степень b:

Обратите внимание, что мы используем оператор возведения в степень (**) , чтобы вычислить результат a в степени b.

Давайте выполним несколько запусков скрипта, чтобы убедиться, что он дает правильные ответы:

Вы также можете использовать оператор по модулю (%) для вычисления целочисленных остатков. Например, значение переменной rem в следующем операторе будет равно 2:

Остаток здесь 2, потому что 5 в 17 три раза, а два остается!

Время практики: создание сценария bash для конвертера степеней

Давайте завершим это руководство, создав скрипт с именем c2f.sh , который преобразует градусы Цельсия в градусы Фаренгейта, используя уравнение ниже:

Это будет хорошее упражнение для вас, чтобы попробовать новые вещи, которые вы только что узнали в этом руководстве по bash.

Вот решение (может быть несколько способов добиться того же результата):

Мы использовали команду bc, потому что мы имеем дело с десятичными знаками, и мы также использовали “scale = 2” для отображения вывода в двух десятичных точках.

Давайте сделаем несколько запусков скрипта, чтобы убедиться, что он выводит правильные результаты:

Отлично! На этом мы подошли к концу этой статьи. Надеюсь, вам понравилось заниматься математикой с помощью bash.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Читайте также:  Как удалить касперского astra linux
Оцените статью