Существует несколько способов выполнять вычисления внутри скрипта или командной строки, рассмотрим эти способы: Рассмотрим эти способы подробнее: let "выражение" a=5
b=3
let sum=a+b
let diff=a-b
let prod=a*b
let div=a/b
let mod=a%b
echo "Сумма: $sum"
echo "Разность: $diff"
echo "Произведение: $prod"
echo "Деление: $div"
echo "Остаток от деления: $mod" Конструкция $(( )) используется для выполнения арифметических вычислений. Это встроенный механизм, позволяющий выполнять операции с целыми числами прямо в командной строке или скриптах. let "выражение" x="3"
y="2"
echo "$(( $x * ( $y + 1 ) ))" astra@astra:~$ echo $((5 + 3))
8
astra@astra:~$ echo $((10 * 2 - 3))
17
astra@astra:~$ a=15
astra@astra:~$ b=7
astra@astra:~$ echo $((a + b))
22
astra@astra:~$ echo $((9 / 2)) # (целочисленное деление)
4
astra@astra:~$ # Проверка условий:
astra@astra:~$ x=10
astra@astra:~$ if ((x > 5)); then
> echo "x больше 5"
> fi
x больше 5 expr аргумент1 оператор аргумент2 expr работает только
Существует несколько способов выполнять вычисления внутри скрипта или командной строки, рассмотрим эти способы: Рассмотрим эти способы подробнее: let "выражение" a=5
b=3
let sum=a+b
let diff=a-b
let prod=a*b
let div=a/b
let mod=a%b
echo "Сумма: $sum"
echo "Разность: $diff"
echo "Произведение: $prod"
echo "Деление: $div"
echo "Остаток от деления: $mod" Конструкция $(( )) используется для выполнения арифметических вычислений. Это встроенный механизм, позволяющий выполнять операции с целыми числами прямо в командной строке или скриптах. let "выражение" x="3"
y="2"
echo "$(( $x * ( $y + 1 ) ))" astra@astra:~$ echo $((5 + 3))
8
astra@astra:~$ echo $((10 * 2 - 3))
17
astra@astra:~$ a=15
astra@astra:~$ b=7
astra@astra:~$ echo $((a + b))
22
astra@astra:~$ echo $((9 / 2)) # (целочисленное деление)
4
astra@astra:~$ # Проверка условий:
astra@astra:~$ x=10
astra@astra:~$ if ((x > 5)); then
> echo "x больше 5"
> fi
x больше 5 expr аргумент1 оператор аргумент2 expr работает только
...Читать далее
Вступление
Существует несколько способов выполнять вычисления внутри скрипта или командной строки, рассмотрим эти способы:
- команда let
- $(( )) (предпочтительный способ)
- expr (устаревший метод)
- Операции с плавающей точкой (bc — калькулятор)
- awk (текстовый обработчик)
- Инкремент и декремент
Рассмотрим эти способы подробнее:
1. Арифметика с использованием let
1.1 Синтаксис:
let "выражение"
1.2 Основные особенности
- Арифметические операции: +, -, *, /, % (остаток от деления), ** (возведение в степень).
- Инкремент и декремент: ++ и --.
- Поддерживает логические и побитовые операции: &, |, ^, <<, >>.
- Переменные не требуют явного указания $ при использовании внутри выражения.
1.3 Пример
a=5
b=3
let sum=a+b
let diff=a-b
let prod=a*b
let div=a/b
let mod=a%b
echo "Сумма: $sum"
echo "Разность: $diff"
echo "Произведение: $prod"
echo "Деление: $div"
echo "Остаток от деления: $mod"
2. $(( )) (предпочтительный способ)
Конструкция $(( )) используется для выполнения арифметических вычислений. Это встроенный механизм, позволяющий выполнять операции с целыми числами прямо в командной строке или скриптах.
2.1 Синтаксис
let "выражение"
2.2 Особенности
- Внутри $(( )) можно использовать стандартные арифметические операторы.
- Поддерживаются как простые, так и сложные выражения.
- $(( )) работает только с целыми числами (не поддерживает числа с плавающей точкой).
2.3 Примеры
x="3"
y="2"
echo "$(( $x * ( $y + 1 ) ))"
astra@astra:~$ echo $((5 + 3))
8
astra@astra:~$ echo $((10 * 2 - 3))
17
astra@astra:~$ a=15
astra@astra:~$ b=7
astra@astra:~$ echo $((a + b))
22
astra@astra:~$ echo $((9 / 2)) # (целочисленное деление)
4
astra@astra:~$ # Проверка условий:
astra@astra:~$ x=10
astra@astra:~$ if ((x > 5)); then
> echo "x больше 5"
> fi
x больше 5
3. Через expr (устаревший метод)
3.1 Синтаксис
expr аргумент1 оператор аргумент2
expr работает только с целыми числами.
3.2 Пример
a=7
b=2
sum=$(expr $a + $b)
diff=$(expr $a - $b)
prod=$(expr $a \* $b) # Важно: умножение экранируется
div=$(expr $a / $b)
mod=$(expr $a % $b)
echo "Сумма: $sum"
$ echo "Разность: $diff"
Разность: 5
$ echo "Произведение: $prod"
Произведение: 14
$ echo "Деление: $div"
Деление: 3
$ echo "Остаток: $mod"
Остаток: 1
3.3 Дополнительные возможности
astra@astra:~$ expr length "hello" #Длина
5
astra@astra:~$ expr substr "abcdef" 2 3 #Извлечение подстроки (Начало = 2, Длина = 3)
bcd
astra@astra:~$ expr index "abcdef" "c" #Позиция подстроки\
3
#Логические операции
#Сравнение чисел
astra@astra:~$ expr 5 \< 10
1
astra@astra:~$ expr 10 = 10
1
astra@astra:~$ expr 5 \> 10
0
astra@astra:~$ expr 0 \| 1 #Логическое "ИЛИ" (|):
1
4. Операции с плавающей точкой плавающей точкой (bc — калькулятор)
4.1 Синтаксис
bc [опции] [файл]
bc - Язык калькулятора произвольной точности
4.2 Основные возможности bc
- Арифметические операции: сложение (+), вычитание (-), умножение (*), деление (/), остаток от деления (%).
- Работа с десятичными дробями: задается параметром scale.
- Математические функции: sqrt() — квадратный корень, s() — синус, c() — косинус и т. д. (при использовании -l).
- Использование переменных: присваивание значений и вычисление с переменными.
- Поддержка циклов и условий: конструкции if, while, for.
4.3 Опции
- -l Включает математическую библиотеку (sin, cos, sqrt и др.)
- -q Отключает приветственное сообщение в интерактивном режиме
- -w Показывает предупреждения (если есть)
4.4 Пример
a=5.5
b=2.2
sum=$(echo "$a + $b" | bc)
diff=$(echo "$a - $b" | bc)
prod=$(echo "$a * $b" | bc)
div=$(echo "scale=2; $a / $b" | bc) # scale=2 — два знака после запятой
echo "Сумма: $sum"
Сумма: 7.7
echo "Разность: $diff"
Разность: 3.3
echo "Произведение: $prod"
Произведение: 12.1
echo "Деление: $div"
Деление: 2.50
4.5 Дополнительные функции
astra@astra:~$ echo "2 + 3 * 4" | bc
14
astra@astra:~$ echo "scale=3; 10 / 3" | bc
3.333
astra@astra:~$ echo "scale=4; sqrt(25)" | bc
5.0000
astra@astra:~$ echo "x=10; y=5; x*y" | bc
50
astra@astra:~$ echo "s(1)" | bc -l # Синус 1 радиана
.84147098480789650665
4.6 Интерактивный калькулятор
astra@astra:~$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5+3
8
quit
5. awk (текстовый обработчик)
awk — это мощный текстовый обработчик, который часто используется в UNIX-подобных системах для анализа и обработки текстовых данных. Он поддерживает встроенные арифметические операции и может использоваться как калькулятор или инструмент для сложных вычислений.
5.1 Примеры
Заполняю файл data.txt числами и затем обрабатываю
astra@astra:~$ echo 10 >>data.txt
astra@astra:~$ echo 20 >>data.txt
astra@astra:~$ echo 30 >>data.txt
astra@astra:~$ awk '{sum += $1} END {print "Сумма:", sum}' data.txt
Сумма: 60
astra@astra:~$ awk '{sum += $1; count++} END {print "Среднее:", sum / count}' data.txt
Среднее: 20
astra@astra:~$ echo 5 | awk '{print $1^2}'
25
astra@astra:~$ awk 'BEGIN {a = 7 / 3; printf("%.2f\n", a)}'
2.33
astra@astra:~$ awk 'BEGIN {print sqrt(25), int(4.7), rand()}'
5 4 0.924046
6. Инкремент и декремент
astra@astra:~$ a=10
astra@astra:~$ ((a++)) # Увеличить на 1
astra@astra:~$ echo "a после инкремента: $a"
a после инкремента: 11
astra@astra:~$
astra@astra:~$ ((a--)) # Уменьшить на 1
astra@astra:~$ echo "a после декремента: $a"
a после декремента: 10