while q = 3
не имеет смысла. Возможно, вы намеревались проверить, равно ли q 3. Тогда вы должны были сделать
while [ "$q" -eq 3 ] # or better while (( q == 3 )). See [1]
Также обратите внимание, что
while q=3 #No spaces around = during assignment.
do
#stuff
done
также было бы синтаксически правильным, но логически неверным.
Также обратите внимание, что
q=‘expr $q + 1‘ # that should have been backticks ` instead of single quote '
ie
q=`expr $q + 1`
является правильным использованием
Возможно, многие оболочки теперь поддерживают такие конструкции, как
(( q++ )) # same effect as q=`expr $q + 1`
{{ 1}}
[1] (())
позаботится of unset q
, заменив его нулем