Bash поддерживает выполнение простейших математических операций. В частности:
+
Сложение (5 + 4 = 9)
-
Вычитание (5 - 4 = 1)
*
Умножение (5 * 4 = 20)
/
Деление (5 / 4 = 1)
%
Получение остатка от деления (5 % 4 = 1)
При этом все операции имеют следующий синтаксис:
$((operand1 operation operand2))
Вся заключается в двойные скобки, а перед открывающей скобкой ставится символ $. operand1 и operand2 представляют операнды операции, а op - знак операции. Например, определим следующий скрипт hello:
#!/bin/bash # скрипт, который выполняет математические операции result=$((1 + 3)) echo "result = $result" exit 0
Здесь переменной result присваивается результат сложения чисел 1 и 3. Запустим скрипт:
eugene@Eugene:~$ bash hello result = 4 eugene@Eugene:~$
Теперь используем в скрипте переменные:
#!/bin/bash # скрипт, который выполняет математические операции a=9 b=4 n1=$((a + b)) n2=$((a - b)) n3=$((a * b)) n4=$((a / b)) n5=$((a % b)) echo "a + b = $n1" echo "a - b = $n2" echo "a * b = $n3" echo "a / b = $n4" echo "a % b = $n5" exit 0
В данном случае выполняются арифметические действия над двумя переменными a и b, а результат присваивается другой переменной. Обратите внимание, что сами переменные внутри скобок используются без символа $
n1=$((a + b))
Запустим скрипт:
eugene@Eugene:~$ bash hello a + b = 13 a - b = 5 a * b = 36 a / b = 2 a % b = 1 eugene@Eugene:~$
Есть также и другой способ определения математических операций - с помощью команды expr:
expr operand1 op operand2
Например, выполним сложим два числа:
eugene@Eugene:~$ expr 5 + 2 7 eugene@Eugene:~$
Подобным образом можно использовать подстановку команды и присвоить результат переменной:
eugene@Eugene:~$ sum=`expr 5 + 2`; echo $sum 7 eugene@Eugene:
В данном случае результат сложения 5 + 2
присваивается переменной sum, которая затем с помощью команды echo выводится на консоль. Точка с запятой ; разделяет две кманды.
Стоит учитывать, что так мы можем применять все операции кроме умножения. Для выполнения умножения символ * надо экранировать слешем, иначе мы получим ошибку:
eugene@Eugene:~$ expr 5 * 2 expr: syntax error: unexpected argument \‘Android\’ eugene@Eugene:~$ expr 5 \* 2 10 eugene@Eugene:~$
Также мы можем выполнять математические операции и без expr, если результат присваивается переменной, определяемой с помощью команды let:
eugene@Eugene:~$ let result="5+2" eugene@Eugene:~$ echo $result 7 eugene@Eugene:~$ let result="5*2" eugene@Eugene:~$ echo $result 10 eugene@Eugene:~$