- Глава 8. Операции и смежные темы
- 12.8. Команды выполнения математических операций
- Арифметические операции в консоли UNIX
- Операции с целыми числами
- Операции с числами с плавающей запятой в командной строке
- Мало букафф? Читайте есчо !
- Копируем файлы с AWS S3
- Подсчет времени выполнения скрипта в UNIX
- Арифметические операции в Bash скрипте
- Введение
- Двойные скобки
- Сложение
- Целочисленное деление
- Остаток от деления
- Float Сложение
- bc: float умножение
- Математика в BASH с помощью bc
- Использование bc для базовых операций:
- Округление результата
- Если же у Вас есть файл с набором математических операций
- Использование результата последней операции:
- Тригонометрические функции:
- Создание переменных на основе результатов вычислений:
- You May Also Enjoy
- Jenkins auth over AWS Cognito
- Copy the Jenkins job
- Установка nginx из исходников
- Уникальные IP адреса в access.log Apache
Глава 8. Операции и смежные темы
присваивание
Инициализация переменной или изменение ее значения
Универсальный оператор присваивания, пригоден как для сравнения целых чисел, так и для сравнения строк.
Оператор | Операция |
---|---|
+, -, \*, / | Сложение, вычитание, умножение, деление |
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 можно с помощью:
Источник