Сложение, вычитание, умножение, деление, модуль в Bash
В зависимости от того, какой тип работы вы хотите, чтобы ваши сценарии выполнялись, вы можете в конечном итоге использовать арифметику много или не много. Однако разумная уверенность в том, что вам нужно будет использовать арифметику в какой-то момент. Подобно переменным, их разумно легко реализовать, и знание того, как это сделать, является важным навыком мастерства мастеров Bash.
Существует несколько способов арифметики в сценариях Bash. Мы рассмотрим их для полноты, но рекомендуемый подход - это арифметическое расширение (последнее охватывает).
Let
Let это встроенная функция Bash, которая позволяет нам выполнять простую арифметику. Он следует основному формату:
let <арифметическое выражение>
Арифметическое выражение может принимать различные форматы, которые мы опишем ниже. Первая часть, как правило, всегда является переменной, которая сохраняется в результате.
Давайте рассмотрим простой пример:
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 - это сокращение для приращения значения переменной a на 1. Это то же самое, что и запись «a = a + 1».
- Строка 16 - Мы можем также включить в выражение другие переменные.
Вот таблица с некоторыми из основных выражений, которые вы можете выполнить. Есть и другие, но они наиболее часто используются.
оператор | операция |
---|---|
+, -, / *, / | Сложение, вычитание, умножение, деление |
var ++ | Увеличьте переменную var на 1 |
var-- | Уменьшить переменную var на 1 |
% | Модуль (возвращает остаток после деления) |
Эти операторы могут использоваться и в других механизмах, описанных ниже.
Expr
Expr похож на let, но вместо сохранения результата на переменную вместо этого выводит ответ. В отличие от let вам не нужно заключать выражение в кавычки. Вы также должны иметь пробелы между элементами выражения. Также часто используется выражение expr в подстановке команд для сохранения вывода в переменную.
expr item1 оператор item2
Давайте рассмотрим простой пример:
expr_example.sh
#!/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 - Некоторые символы имеют особое значение для Bash, поэтому мы должны избегать их (поставить обратную косую черту перед), чтобы удалить их особое значение.
- Строка 12 - Здесь мы покажем модуль оператора . Модуль - это остаток, когда первый элемент делится на второй элемент.
- Строка 14 - На этот раз мы используем expr в подстановке команд, чтобы сохранить результат в переменной a.
Двойные скобки
В разделе «Переменные» мы увидели, что мы можем легко сохранить вывод команды в переменной. Оказывается, этот механизм также может сделать базовую арифметику для нас, если мы немного подберем синтаксис. Мы делаем это, используя двойные скобки:
$ ((выражение))
Вот пример для иллюстрации:
expansion_example.sh
#!/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 - Это немного другая форма. Здесь значение переменной b увеличивается на 1 (используя тот же механизм, что и в случае let ). Когда мы это делаем, нам не нужен знак $, предшествующий скобкам.
- Строка 19 - Это немного другая форма предыдущего примера. Здесь значение переменной b увеличивается на 3. Это сокращение для b = b + 3 .
- Строка 19 - В отличие от других методов, когда мы делаем умножение, нам не нужно выходить из знака * .
Таким образом, вы можете видеть, что double parenthese достаточно гибко в том, как вы форматируете его выражение. Это часть того, почему мы предпочитаем этот метод. Поскольку двойные круглые скобки встроены в Bash, он также работает более эффективно (хотя, честно говоря, с сырой вычислительной мощью машин в наши дни разница в производительности действительно несущественна).
Длина переменной
Это не арифметика, но она может быть весьма полезна. Если вы хотите узнать длину переменной (сколько символов), вы можете сделать следующее:
${#переменная}
Вот пример:
length_example.sh
#!/bin/bash # Показывать длину переменной. a='Hello World' echo ${#a} # 11 b=4953 echo ${#b} # 4
Часть 3. Пользовательский ввод в Bash
Часть 5. If, else, case в Bash