While 循环陷入无限循环

While 循环陷入无限循环

我不明白为什么这个函数会卡住。
我想做的是创建一个从预定开始日期到当前月份的文件夹。不幸的是,它完成了所有文件夹的创建,然后陷入了下面发布的算术中。
有人能给我一个提示,让我走上正确的轨道吗?
这是我的代码:

yearloop(){
   year=$(echo "$firstmsgdate"|cut -d"/" -f3)
   zmmailbox -z -m $account gf /archive || zmmailbox -z -m $account cf /archive
   crntmnth=$(date +"%m")
   incmonth=0
   while [ $year -le $currentyear ]; do
     if [ "$year" -lt "$currentyear" ]; then
       #do stuff
       let year++
     elif [ $year -eq $currentyear ]; then
       while [ $incmonth -lt $crntmnth ]; do
         #do otherthings
         let incmonth++
       done
     else
       echo "Else"
     fi
   done
}

这是我收到的输出
+ '[' 15 -le 15 ']'
+
'[' 15 -lt 15 ']' + '[' 15 -eq 15 ']'
+ '[' 2 -lt 02 ']'
+ '[' 15 -le 15 ']'
+ '[' 15 -lt 15 ']'
+ '[' 15 -eq 15 ']'
+ '[' 2 -lt 02 ']'
+ '[' 15 -乐 15 ']'

答案1

当年份到达当前年份时,它永远不会再次增加(有效elif),因此while测试“小于或等于”的外循环仍然有效。放在零件中的循环let year++之后,它就会起作用。或者甚至更好...此时明确调用。依赖循环自行终止永远都不好。whileelifbreakwhile

此外,您可以简单地使用序列并跳过所有笨拙的测试:

#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

无论如何,你的双循环毫无用处 - 今年只发生一次。

相关内容