🏠 | 💻 IT | Linux | Bash |

Арифметические операции в Bash скрипте

Содержание статьи
Введение
let
expr
Двойные скобки

Введение

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 - Увеличиваем значение на 1. Это аналог "a = a + 1".

Строка 16 - В выражение можно включить и другие переменные.

./let_example.sh 11

9 9 10 20 41

Таблица основных операторов

Оператор Операция
+, -, \*, / Сложение, вычитание, умножение, деление
var++ Увеличение переменной на 1
var-- Уменьшение переменной на 1
% Модуль: возвращает остаток от деления

expr

expr is similar to let except instead of saving the result to a variable it instead prints the answer.

Unlike let you don't need to enclose the expression in quotes. You also must have spaces between the items of the expression.

It is also common to use expr within command substitution to save the output to a variable.

expr item1 operator item2

Let's look at a simple example:

expr_example.sh

#!/bin/bash # Basic arithmetic using expr expr 5 + 4 expr "5 + 4" expr 5+4 expr 5 \* $1 expr 11 % 2 a=$( expr 10 - 3 ) echo $a # 7

Let's break it down:

Line 4 - This is the basic format. Note that there must be spaces between the items and no quotes.

Line 6 - If we do put quotes around the expression then the expression will not be evaluated but printed instead.

Line 8 - If we do not put spaces between the items of the expression then the expression will not be evaluated but printed instead.

Line 10 - Some characters have a special meaning to Bash so we must escape them (put a backslash in front of) to remove their special meaning.

Line 12 - Here we demonstrate the operator modulus. The modulus is the remainder when the first item is divided by the second item.

Line 14 - This time we're using expr within command substitution in order to save the result to the variable a.

./expr_example.sh 12

9
5 + 4
5+4
60
1
7

Двойные скобки

In the section on Variables we saw that we could save the output of a command easily to a variable. It turns out that this mechanism is also able to do basic arithmetic for us if we tweak the syntax a little. We do so by using double brackets like so:

$(( expression ))

Here's an example to illustrate:

expansion_example.sh

#!/bin/bash # Basic arithmetic using double parentheses 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

Let's break it down:

Line 4 - This is the basic format. As you can see we may space it out nicely for readability without the need for quotes.

Line 7 - As you can see, it works just the same if we take spacing out.

Line 10 - We may include variables without the preceding $ sign.

Line 13 - Variables can be included with the $ sign if you prefer.

Line 16 - This is a slightly different form. Here the value of the variable b is incremented by 1 (using the same mechanism illustrated under let). When we do this we don't need the $ sign preceding the brackets.

Line 19 - This is a slightly different form of the previous example. Here the value of the variable b is incremented by 3. It is a shorthand for b = b + 3.

Line 19 - Unlike other methods, when we do multiplication we don't need to escape the * sign.

./expansion_example.sh

9
8
11
12
13
16
20

So as you can see double parenthese is quite flexible in how you format it's expression.

This is part of why we prefer this method. As double parentheses is builtin to Bash it also runs slighly more efficiently (though to be honest, with the raw computing power of machines these days the difference in performance is really insignificant).

ryanstutorials.net

Статьи о Bash
Bash
Bash Scripting
if else: Условные операторы
Цикл while
date
Переход на новую строку
Передать файл или пароль по SFTP в Bash скрипте
Ошибки Bash

Если остались вопросы - смело задавайте их в комментариях либо воспользуйтесь поиском по сайту

Поиск по сайту

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: