Ах, программирование оболочки так обидно ...
k=0
while [ $k != 4 ]; do echo $k; k=`expr $k + 1`; done
Работает и печатает 0, 1, 2, 3 на отдельных строках, как и ожидалось, и это, по сути, похоже на то, что у вас есть, за исключением пробелов, переносов строк и источников значений. Возможно, это проблема строки и значения, но я не думал, что переменные оболочки имеют типы.
Я бы попробовал раздеть то, что у тебя есть, до тех пор, пока оно не заработало, и затем добавить обратно то, что ты хочешь, чтобы оно делало.