Quando o ano atinge o ano atual, ele nunca é incrementado novamente (o elif
está em vigor), portanto, o loop while
externo que testa "menor que ou igual a" ainda está em vigor. Coloque let year++
após o loop while
na parte elif
e ele funcionará. Ou melhor ainda ... chame break
explicitamente nesse ponto. Nunca é bom confiar no loop while
para terminar sozinho.
Além disso, você pode simplesmente usar sequências e pular todos os testes desajeitados:
#initialization as before
let lastyear=currentyear-1
for year in $(seq $year $lastyear); do
#do stuff with $year
done
#now months of the current year
for month in $(seq $incmonth $crntmnth); do
#do stuff with $month and $currentyear
done
Seu loop duplo era inútil de qualquer maneira - o ano atual acontece apenas uma vez.