この機能がなぜ詰まっているのか理解できません。
私がしたいのは、予定された開始日から当月までのフォルダを作成することです。残念ながら、すべてのフォルダの作成が完了し、以下に公開された操作が中断されます。
誰でも私が正しい道に行くためにヒントを与えることができますか?
これは私のコードです。
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
とにかく二重ループは役に立たない。今年は一回だけ発生します。