Это скорее математическая проблема, чем проблема с вашим кодом bash. Посмотрите на формулу для $restr_prev
:
restr_prev= ${restr} + (5 * ${step})
Для шага 1
формула рассчитывается до 20 + 5 * 1 = 25
, для шага 2
формула приводит к 15 + 5 * 2 = 25
и так далее ...
Чтобы получить ожидаемые результаты, вам просто нужно добавить 5
к значению restr
. Следовательно, соответствующая строка в вашем скрипте должна выглядеть так:
let "restr_prev=(${restr} + 5)"
Как уже было предложено в комментариях, вы должны использовать $((expression))
для арифметического расширения вместо let
, так как последнее является встроенным в bash и не охватывается стандартом POSIX . Обращение с предложениями приводит к следующему коду:
#!/bin/bash
# assign initial value
restr_start='25'
# assign a new variable, which is a number that will decrease initial value by 5
# keeping always the value of previous variable as restr_prev
for step in {1..4}; do
restr=$((restr_start - (5 * step)))
restr_prev=$((restr + 5))
echo "this is $restr current restart"
echo "this is $restr_prev previous restart"
done