Введение
Одной из наиболее распространенных арифметических операций при написании сценариев Bash является увеличение и уменьшение переменных. Это часто используется в циклах в качестве счетчика, но также может встречаться в другом месте скрипта.
Увеличение и уменьшение означает добавление или вычитание значения (обычно 1
) соответственно из значения числовой переменной. Арифметическое расширение можно выполнить с помощью двойных скобок ((...))
и $((...))
или с помощью встроенной команды let
.
В Bash есть несколько способов увеличить/уменьшить значение переменной. В этой статье описаны некоторые из них.
Использование операторов + и -
Самый простой способ увеличить/уменьшить переменную - использовать операторы +
и -
.
i=$((i+1))
((i=i+1))
let "i=i+1"
i=$((i-1))
((i=i-1))
let "i=i-1"
Этот метод позволяет вам увеличивать и уменьшать переменную на любое желаемое значение.
Вот пример увеличения переменной в цикле until
:
i=0
until [ $i -gt 3 ]
do
echo i: $i
((i=i+1))
done
i: 0
i: 1
i: 2
i: 3
Операторы + = и - =
В дополнение к описанным выше основным операторам bash также предоставляет операторы присваивания +=
и -=
. Эти операторы используются для увеличения и уменьшения значения левого операнда со значением, указанным после оператора.
((i+=1))
let "i+=1"
((i-=1))
let "i-=1"
В следующем цикле while
мы уменьшаем значение переменной i
на 5
.
i=20
while [ $i -ge 5 ]
do
echo Number: $i
let "i-=5"
done
Number: 20
Number: 15
Number: 10
Number: 5
Использование операторов ++ и -
Операторы ++
и --
увеличивают и уменьшают его операнд на 1
соответственно и возвращают значение.
((i++))
((++i))
let "i++"
let "++i"
((i--))
((--i))
let "i--"
let "--i"
Операторы могут использоваться до или после операнда. Они также известны как:
- приращение префикса:
++i
- уменьшение префикса:
--i
- постфиксный приращение:
i++
- постфиксный декремент:
i--
Префиксные операторы сначала увеличивают/уменьшают операторы на 1
, а затем возвращают новое значение операторов. С другой стороны, постфиксные операторы возвращают значение операторов до того, как оно было увеличено/уменьшено.
Если вы просто хотите увеличить/уменьшить переменную, нет никакой разницы, используете ли вы префиксный или постфиксный оператор. Это имеет значение только в том случае, если результат операций используется в другой операции или присваивается другой переменной.
В следующих примерах показано, как работает оператор ++
при использовании до и после его оператора:
x=5
y=$((x++))
echo x: $x
echo y: $y
x: 6
y: 5
x=5
y=$((++x))
echo x: $x
echo y: $y
x: 6
y: 6
Ниже приведен пример использования инкремента постфикса в скрипте bash:
#!/bin/bash
i=0
while true; do
if [[ "$i" -gt 3 ]]; then
exit 1
fi
echo i: $i
((i++))
done
Недостатком использования этих операторов является то, что переменная может только увеличиваться или уменьшаться 1
.
Вывод
Переменные увеличения и уменьшения в Bash можно выполнять разными способами. Какой бы метод вы ни использовали, результат будет одинаковым.