我不明白为什么这个函数会卡住。
我想做的是创建一个从预定开始日期到当前月份的文件夹。不幸的是,它完成了所有文件夹的创建,然后陷入了下面发布的算术中。
有人能给我一个提示,让我走上正确的轨道吗?
这是我的代码:
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++
之后,它就会起作用。或者甚至更好...此时明确调用。依赖循环自行终止永远都不好。while
elif
break
while
此外,您可以简单地使用序列并跳过所有笨拙的测试:
#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
无论如何,你的双循环毫无用处 - 今年只发生一次。