Операции с числами linux

Глава 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)

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

Источник

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. Расчет гипотенузы прямоугольного треугольника

Источник

Арифметические операции в консоли UNIX

Как произвести в bash/sh простейшие вычисления? Давайте рассмотрим несколько примеров.

Операции с целыми числами

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

Вот 6 арифметических команд, которые вы можете выполнять:

Как видите, для вычисления используется синтаксис: $(( выражение )) или $[ выражение ].

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

Операции с числами с плавающей запятой в командной строке

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

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

Для сохранения промежуточного результата:

Данная запись опубликована в 12.09.2018 18:44 и размещена в Программирование. Вы можете перейти в конец страницы и оставить ваш комментарий.

Мало букафф? Читайте есчо !

Копируем файлы с AWS S3

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

Подсчет времени выполнения скрипта в UNIX

Для того чтобы подсчитать время выполнения, нам понадобится получать время в текущий момент и вычислять разницу. Обе задачи вполне решаемы в консоли UNIX. Дату мы получим в виде числа секунд и микросекунд с начала UNIX эпохи [crayon-6162c994734d0830297667/] .

Источник

Арифметические операции в Bash скрипте

Введение

В bash существует множество способов выполнения арифметических операций. В этой статье вы найдёте подробный обзор использования let, expr, (()) и bc

let это встроенная функция bash, которая позволяет производить базовые арифметические операции.

Используется следующим образом:

Рассмотрим примеры в скрипте let_example.sh

#!/bin/bash # Простая арифметика с let let A=5+4 echo $A # 9 let «A = 5 + 4» echo $A # 9 let A++ echo $A # 10 let «A = 4 * 5» echo $A # 20 let «A = $1 + 30» echo $A # 30 + первый аргумент из командной строки

Разберём команды по очереди:

Строка 4 — Это простейшая форма записи без кавычек.

Помните, что если вычисление идёт без кавычек — ставить пробелы нельзя

Строка 7 — Если поставить кавычки — можно пользоваться пробелом для лучшей читаемости.\

Строка 10 — Увеличиваем значение на 1. Это аналог «a = a + 1».

Строка 16 — В выражение можно включить и другие переменные.

Таблица основных операторов

Оператор Операция
+, -, \*, / Сложение, вычитание, умножение, деление
var++ Увеличение переменной на 1
var— Уменьшение переменной на 1
% Модуль: возвращает остаток от деления

expr похож на let за исключением того, что вместо сохранения результата в переменную expr по умолчанию печатает ответ.

Но никто не запрещает сохранять результат expr в переменные с помощью command substitution: x = $(expr 2 + 2)

В отличие от let не нужно заключать выражения с пробелами в кавычки

Нужно ставить пробелы вокруг операторов.

expr item1 operator item2

Рассмотрим простой пример:

#!/bin/bash # Простая арифметика с использованием expr expr 5 + 4 expr «5 + 4» expr 5+4 expr 5 \* $1 expr 11 % 2 A= $( expr 10 — 3 ) echo $A # 7

Разберём этот пример пошагово:

Строка 4 — Это базовый синтаксис. Обратите внимание на пробелы и на отсутствие кавычек.

Строка 6 — Если заключить выражение в кавычки его в таком виде и выведет в терминал.

Строка 8 — Если не поставить пробелы выражение будет выведено в терминал без вычисления.

Строка 10 — Некоторые символы нужно экранировать.

Строка 12 — Это деление по модулю. Результатом будет остаток от целочисленного деления двух чисел.

Строка 14 — Пример выполнения command substitution чтобы сохранить результат в переменную a.

Двойные скобки

Результат выполнения команды можно легко сохранить в переменную.

VAR = $(какая-то команда)

На основе этого механизма можно выполнять арифметические действия. Достаточно вместо одной пары скобок использовать две.

Рассмотрим примеры в скрипте

#!/bin/bash # Простая арифметика с двойными скобками A= $(( 4 + 5 )) echo $A # 9 A= $((3+5)) echo $A # 8 B= $(( A + 3 )) echo $B # 11 B= $(( $A + 4 )) echo $B # 12 (( B++ )) echo $B # 13 (( B += 3 )) echo $B # 16 A= $(( 4 * 5 )) echo $A # 20

Разберём этот скрипт:

Строка 4 — Базовый синтаксис. Можно ставить пробелы без использования кавычек.

Строка 7 — Работает и без пробелов.

Строка 10 — Можно использовать переменные без $ перед ними.

Строка 13 — А можно и с $

Строка 16 — Увеличение переменной на 1. Символ $ не нужен.

Строка 19 — Увеличение переменной на 3. Это краткая форма записи b = b + 3.

Строка 19 — В отличие от других способов символ * не нужно экранировать.

Двойные скобки дают довольно много свободы в форматировании кода.

Они доступны в Bash по умолчанию и их эффективность немного выше. Хотя заметить разницу на современных компьютерах будет непросто.

Сложение

Сложение в bash можно выполнить следущими способами

#!/bin/bash # Bash + # let A=2 B=3 let C=$A+ $B echo $C

#!/bin/bash # Bash + # expr and (( )) D=4 E=5 F=$( expr $D + $E ) G=$(( $D + $D )) echo $F echo $G

Целочисленное деление

В bash по умолчанию реализовано именно целочисленное деление

Рассмотрим, что будет если попытаться поделить числа с помощью let

#!/bin/bash # Целочисленное деление A=100 B=3 let «C = $A / $B » echo «C: $C «

Дробная часть потерялась

Если вас это не устраивает — используйте bc

Остаток от деления

Остаток от деления можно получить с помощью % следующим оригинальным образом

Float Сложение

Сложение чисел с плавающей точкой можно выполнить с помощью bc

#!/bin/bash # Bash + # bc X=1.5 Y=3.5 Z= $(bc «scale=3; $X + $Y «) echo «1.5 + 3.5 = » $Z

В bash нет родной поддержки деления чисел с плавающей точкой. Но есть утилиты, которые умеют это делать.

Одна из них это bc

Что будет если попытаться поделить числа с помощью let

#!/bin/bash # Деление с let A=100 B=3 let «C = $A / $B » echo «C: $C «

Дробная часть потерялась

Чтобы этого не произошло используйте bc

# Деление с bc D= $(bc «scale=3; $A / $B «) echo «D: $D «

bc: float умножение

Также с помощью bc удобно умножать числа с плавающей запятой

#!/bin/bash # Умножение с bc A=2.5 B=5.6 С= $(bc «scale=3; $A * $B » ) echo «С: $C «

Источник

Математика в 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 можно с помощью:

Источник

Читайте также:  Что такое windows system32 drivers classpnp sys
Оцените статью