Как выполнять арифметические операции в Bash
Различные способы выполнения математических операций в Bash
В этой статье мы сосредоточимся на том, как выполнять математические операции в скриптах bash. Мы можем выполнять арифметические операции в Bash, используя встроенные и внешние инструменты. Сначала мы узнаем о встроенных инструментах.
Примечание. В отличие от других языков программирования, арифметические операции bash не являются простыми (по крайней мере, для меня). Существует несколько встроенных и внешних программ bash для выполнения одних и тех же операций. Если вы хотите выполнить какие-либо сложные математические вычисления, оболочка не рекомендуется для этого.
Выполняйте математические операции в Bash, используя встроенную команду let.
С помощью команды let
вы можете выполнять арифметические, инкрементные, побитовые и условные операции. Недостаток команды let заключается в том, что она не может обрабатывать значения с плавающей запятой.
Команда let
в bash является встроенной командой. Вы можете убедиться в этом, выполнив следующую команду в терминале.
type -a let
let is a shell builtin
Выполните следующую команду, чтобы получить раздел справки, где вы можете найти список операторов, поддерживаемых командой let.
let -help
Пример вывода:
Отображение раздела справки по команде let
При работе с командой let следует учитывать несколько важных моментов.
- Выходные данные любой операции следует присвоить переменной, а затем распечатать. Команда «let» не позволит вам сразу распечатать результаты.
- Между оператором и операндом не допускается пробел.
Создайте сценарий оболочки, скопируйте и вставьте приведенный ниже пример кода и попробуйте запустить сценарий. В приведенном ниже коде я выполняю арифметические операции. Как уже упоминалось, вывод выражения должен быть присвоен переменной перед его печатью.
#!/usr/bin/env bash
let NUMBER1=10
let NUMBER2=3
Addition => + operator
let ADD=$NUMBER1+$NUMBER2
echo "Addition of two numbers : ${ADD}"
Subtraction => - operator
let SUB=$NUMBER1-$NUMBER2
echo "Subtraction of two numbers : ${SUB}"
Multiply => * operator
let MUL=$NUMBER1*$NUMBER2
echo "Multiply two numbers : ${MUL}"
Divide => / operator
let DIV=$NUMBER1/$NUMBER2
echo "Division of two numbers : ${DIV}"
Remainder => % operator
let REM=$NUMBER1%$NUMBER2
echo "Remainder of two numbers : ${REM}"
Exponent => ** operator
let EXPO=$NUMBER1**$NUMBER2
echo "Exponent of two numbers : ${EXPO}"
Выполняйте математические операции в сценариях Bash
Вы также можете выполнять операции пост-инкремента и пост-декремента. Эта операция будет чаще всего использоваться, когда мы запускаем циклы в скрипте.
- Операция пост-инкремента увеличит значение переменной до VARIABLE + 1.
- Операция предварительного увеличения увеличит значение переменной до VARIABLE - 1.
let variable++
let variable--
Выполняйте операции пост-инкремента и пост-декремента
Вы также можете выполнять другие операции сравнения, такие как проверка на равенство, неравенство, больше, меньше и т. д. Я настоятельно рекомендую не использовать команду let
для выполнения каких-либо операций сравнения, поскольку есть более эффективные способы обработки. это.
Выполняйте арифметические операции в Bash, используя встроенные двойные скобки
В качестве альтернативы команде let
вы можете использовать метод двойные скобки, при котором вам нужно поместить оператор и операнд в двойные скобки.
Преимущество этого метода перед командой let
заключается в том, что результат можно сразу распечатать или сохранить в переменной, а между оператором и операндом можно добавлять пробелы. Как и в случае с командой let
, вы не можете выполнять операции с плавающей запятой.
Пример, приведенный ниже, во многом аналогичен примерам, показанным в команде let
. Все, что вам нужно сделать, это поместить выражение в двойные скобки. Нет необходимости добавлять к переменным символ $
внутри двойных скобок. Просто укажите имя переменной, и значение будет интерпретировано.
На изображении ниже, если вы видите строки 12 и 13, вы увидите разницу в том, как обрабатывается выражение. Все, что находится в скобках, будет сначала оценено, а результат будет вычислен относительно других операндов. Это поведение можно увидеть в выводе команд "Multiply" и "Multiply1".
Выполнение арифметических операций в сценариях Bash с использованием двойных скобок
Подобно команде let
, вы также можете выполнять операции увеличения и уменьшения.
((NUMBER2++)
((NUMBER1--))
Вы также можете выполнять сокращенные операции.
(( NUMBER2 = NUMBER2 + 10 ))
(( NUMBER2 += 10 )) # Shorthand
Выполнение операций пост-инкремента и декремента
Выполнение арифметических операций в Bash с помощью утилиты Expr
В предыдущих разделах мы рассмотрели встроенные функции, а в этом разделе мы рассмотрим "expr", который является внешней программой.
Утилита expr может выполнять не только математические операции, но и операции со строками, такие как поиск индекса символа, длины строки, подстроки и т. д.
Прежде чем использовать программу expr, просмотрите справочную страницу, которая даст вам некоторое представление об этой утилите.
man expr
expr -help
Ниже приведен синтаксис команды expr
:
expr
Основная арифметическая операция такая же, как и в предыдущих разделах. Единственное отличие здесь заключается в том, что при использовании * для выполнения операции умножения вам необходимо экранировать ее с помощью "\
", иначе будет выдана ошибка.
expr 10 + 3 # Addition
expr 10 - 3 # Subtraction
expr 10 * 3 # Multiply
expr 10 / 3 # Divide
expr 10 % 3 # Remainder
Выполнение арифметических операций в Bash с помощью утилиты Expr
До сих пор мы видели около трех различных способов выполнения основных арифметических и инкрементальных операций. По сравнению с let
и expr
, рекомендуемым подходом является использование двойных круглых скобок.
Общим для этих трех подходов является то, что они не могут обрабатывать операции с плавающей запятой. Для выполнения операций с плавающей запятой вам придется полагаться на внешние утилиты, такие как awk
и bc
.
Выполнение арифметических операций Bash с помощью утилиты bc
Утилита bc — это внешняя программа, которую можно использовать для выполнения как простых, так и сложных математических операций. Операции с плавающей запятой также поддерживаются утилитой bc.
Вы можете просмотреть тип утилиты bc и ее справочную страницу, используя следующие команды:
type -a bc
man bc
Следующие примеры показывают простые математические операции с целыми и плавающими значениями.
Add
echo "10 + 100" | bc
=> 110
echo "10.15 + 11.20" | bc
21.35
Subtract
echo "100 - 25" | bc
=> 75
echo "100 - 25.5" | bc
=> 74.5
Multiply
echo "10 * 5" | bc
=> 50
echo "10.10 * 4" | bc
=> 40.40
При выполнении операции деления вам необходимо установить значение масштаба для вывода результата в виде значения с плавающей запятой, иначе результат будет целочисленным значением. Значение, установленное в шкале, определяет, сколько цифр будет напечатано после десятичной дроби.
without scale
echo "10.10 / 4" | bc
=> 2
with scale
echo "scale=2;10.10 / 4" | bc
=> 2.52
Вы также можете выполнить операцию экспоненты.
echo "2.2^4" | bc
=> 23.4
Выполняйте математические операции с AWK
Awk предлагает больше возможностей для математических вычислений по сравнению с другими утилитами. Он имеет несколько встроенных функций, которые облегчат нашу жизнь.
Ниже приведен синтаксис для выполнения математических вычислений.
awk "BEGIN {print expression }"
Чтобы выполнить простое умножение, выполните:
awk "BEGIN {print 23 * 4.5 }"
=> 103.5
Из значения с плавающей запятой вы можете получить только целое значение, используя функцию int
.
awk "BEGIN{print int(10.111) }"
=> 10
Вы также можете вычислить квадратный корень из заданного числа, используя функцию sqrt
.
awk "BEGIN{print sqrt(10) }"
=> 3.16228
В частности, при работе с файлами CSV мне часто приходится вычислять среднее значение столбца. Вы можете просто вычислить среднее значение столбца с помощью следующего кода.
Поскольку это файл CSV, я устанавливаю разделитель полей (-F «, »). Здесь сначала добавляется весь второй столбец и делится на NR (количество записей).
awk -F "," '{sum+=$2} END { print "average value from column 2 = ",sum/NR}' data.csv
В ближайшие дни мы опубликуем подробное руководство по awk.
Заключение
В этой статье я показал вам различные методы выполнения простых математических операций в Bash. Если вы выполняете очень простые арифметические операции, придерживайтесь метода двойных скобок, а для более сложных операций используйте awk.