Команда let

Опубликовано admin - чт, 07/27/2023 - 16:19

Bash let — это встроенная команда в системах Linux, используемая для вычисления арифметических выражений переменных оболочки.

Примеры использования команды let в Linux

В отличие от других арифметических вычислений и команд расширения, let — простая команда со своей собственной средой, допускающая также арифметическое расширение.

Содержание

Особенности

Утилита выполняет расчёт всех аргументов в математическом выражении. Расчёт выполняется для целых чисел фиксированной ширины без проверки на переполнение. Однако деление на 0 перехватывается и выдаётся ошибка.

В выражении с командой let можно использовать операторы сложения +, вычитания -, умножения *, деления / и модуля %.

В качестве операндов можно использовать переменные командного процессора. Название переменной заменяется её значением (приводится к целому числу фиксированной ширины) в выражении. У переменной не должен быть включён атрибут integer, чтобы её можно было использовать в выражении.

Операторы вычисляются в порядке старшинства. Вложенные выражения в скобках вычисляются первыми и могут переопределить указанные выше правила старшинства.

Состояние выхода:
Если последний АРГУМЕНТ имеет значение 0, то команда возвращает 1. В противном случае она возвращает 0.

Синтаксис

let аргумент [аргумент ...]

Параметры

Указанные ниже операторы объединены в группы с одинаковым приоритетом. Группы перечислены в порядке уменьшения приоритета.

id++, id--
Последующее увеличение и уменьшение переменной
++id, --id
Предварительное увеличение и уменьшение переменной
-, +
Унарный минус и плюс
!, ~
Логическое и побитовое отрицание
**
Возведение в степень
*, /, %
Умножение, деление, остаток
+, -
Сложение, вычитание
<<, >>
Битовые сдвиги влево или вправо
<=, >=, <, >
Сравнение
==, !=
Равенство, неравенство
&
Побитовое И (AND)
^
Побитовое исключающее ИЛИ (XOR)
|
Побитовое ИЛИ (OR)
&&
Логическое И (AND)
||
Логические ИЛИ (OR)выражение ? выражение : выражение
Условный оператор
=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=
Присвоение

Использование команды let в Linux

Присвоение значения переменной

Присваиваем значение переменной с помощью следующей команды:

$ let "[variable] = [value]"

Например, присваиваем значение 4 переменной var1 и распечатываем значение в качестве вывода:

oleg@mobile:~:$ let "var1 = 4"; echo $var1
4
oleg@mobile:~:$ 

Аналогично, после установки значения переменной команда позволяет нам присвоить такое же значение другой переменной:

oleg@mobile:~:$ let "var1 = 4" "var2=var1"; echo $var2
4
oleg@mobile:~:$ 

Основные арифметические операции

После установки значений переменных используем команду для выполнения основных арифметических операций. Например, установливаем var1 как 4 и var2 как 2 и выполняем несколько операций.

Сложение:

oleg@mobile:~:$ let "var1 = 4" "var2 = 2" "var3=var1+var2"; echo $var3
6
oleg@mobile:~:$ 

Вычитание:

oleg@mobile:~:$ let "var1 = 4" "var2 = 2" "var3=var1-var2"; echo $var3
2
oleg@mobile:~:$ 

Умножение:

oleg@mobile:~:$ let "var1 = 4" "var2 = 2" "var3=var1*var2"; echo $var3
8
oleg@mobile:~:$ 

Деление:

oleg@mobile:~:$ let "var1 = 4" "var2 = 2" "var3=var1/var2"; echo $var3
2
oleg@mobile:~:$ 

Модуль:

oleg@mobile:~:$ let "var1 = 4" "var2 = 2" "var3=var1%var2"; echo $var3
0
oleg@mobile:~:$ 

В этих примерах команда устанавливает значение var3 как результат арифметической операции и распечатывает результат.

Возведение в степень

Команде требуются два целых числа для возведения в степень. Первое значение (base) возводится в степень второго значения (power):

 $ let "[base] ** [power]"

Например, чтобы возвести базовое значение 4 в степень 2 и распечатать результат, используется следующая команда:

oleg@mobile:~:$ let "var1 = 4 ** 2"; echo $var1
16
oleg@mobile:~:$ 

Унарные операции

Используем унарный минус с командой let, чтобы изменить выражение с положительного на отрицательное и наоборот:

oleg@mobile:~:$ let "var1 = 2 + 3" "var1=-var1"; echo $var1
-5
oleg@mobile:~:$ 

Унарный плюс умножает выражение на 1 и возвращает неизменное значение:

oleg@mobile:~:$ let "var1 = 2 + 3" "var1=+var1"; echo $var1
5
oleg@mobile:~:$ 

Изменение значения переменной

Использование операторов постинкремента или постдекремента интерпретирует значение переменной, а затем увеличивает или уменьшает его на 1:

oleg@mobile:~:$ let "var1 = 10" "var2=var1++"; echo $var1 $var2
11 10
oleg@mobile:~:$ 

В приведённом выше примере переменная var2 получает значение var1 (10) до того, как оно увеличивается на 1. То же самое происходит при выполнении постдекремента:

oleg@mobile:~:$ let "var1 = 10" "var2=var1--"; echo $var1 $var2
9 10
oleg@mobile:~:$ 

Выполнение предварительного приращения увеличивает значение var1 на 1 (11), затем присваивает новое значение var2:

oleg@mobile:~:$ let "var1 = 10" "var2=++var1"; echo $var1 $var2
11 11
oleg@mobile:~:$ 

Выполнение предварительного декремента делает то же самое. Однако на этот раз он уменьшает значение var1 на 1 (9):

oleg@mobile:~:$ let "var1 = 10" "var2=--var1"; echo $var1 $var2
9 9
oleg@mobile:~:$ 

Битовые сдвиги

Выполнение битовых сдвигов с помощью команды let сдвигает порядок цифр в двоичном числе влево или вправо. Например, двухкратный сдвиг числа 4 влево дважды умножает его на 2:

oleg@mobile:~:$ let "var1 = 4 << 2"; echo $var1
16
oleg@mobile:~:$ 

Двухкратный сдвиг вправо дважды делит значение на 2:

oleg@mobile:~:$ let "var1 = 4 >> 2"; echo $var1
1
oleg@mobile:~:$ 

Побитовые операции

Побитовое отрицание переворачивает каждую цифру двоичного числа. Эта операция изменяет 1 на 0 и наоборот:

oleg@mobile:~:$ let "var1 = 4" "var2=~var1"; echo $var2
-5
oleg@mobile:~:$ 

В приведённом примере команда let преобразовала значение 4 в 32-разрядное целое число и поменяла местами цифры. Результатом операции явилось -5.

Побитовый оператор AND преобразует пару значений в 32-разрядные целые числа со знаком и сравнивает цифры по порядку. Действие возвращает 1, если обе цифры равны 1, иначе возвращает 0:

oleg@mobile:~:$ let "var1 = 4" "var2 = 8" "var3 = var1&var2"; echo $var3
0
oleg@mobile:~:$ 

Побитовый оператор OR сравнивает соответствующие цифры двух значений и возвращает 1. Но хотя бы один из битов должен быть равен 1:

oleg@mobile:~:$ let "var1 = 4" "var2 = 8" "var3 = var1|var2"; echo $var3
12
oleg@mobile:~:$ 

Побитовый оператор XOR сравнивает соответствующие цифры двух значений и возвращает 0, если цифры совпадают. В противном случае оператор возвращает 1:

oleg@mobile:~:$ let "var1 = 4" "var2 = 8" "var3 = var1^var2"; echo $var3
12
oleg@mobile:~:$ 

Заключение

После внимательного прочтения данной статьи вы сможете использовать в Linux команду let для вычисления арифметических выражений в оболочке Bash.

Поделиться с друзьями