Математические операции

Последнее обновление: 23.03.2024

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:~$ 
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850