我需要使用特定格式YYYYMMDD递增日期(例如:20190401或20190523)。几天和一个月的数字都必须为0。
我希望输入cmd行args ex ./script.ksh(要增加的天数)(开始日期)或./script.ksh(开始日期)(结束日期)
我制作了一个可怕的版本,其中包含./script.ksh(天数)(年)(年)(月)(天),例如:./script.ksh 7 2019 04 10
#The amount of days to load by
Days=$1
Year=$2
Month=$3
Day=$4
count=0
while (($count < $Days))
do
#The date of the file in format: YYYYMMDD
if [[ $Day -eq "1" || $Day -eq "2" || $Day -eq "3" || $Day -eq "4" || $Day -eq "5" || $Day -eq "6" || $Day -eq "7" || $Day -eq "8" || $Day -eq "9" ]];
then
Day=0$Day
fi
Date=$Year$Month$Day
print $Date
#Check if month then day and increment accordingly
#months with 31 days
if [[ ($Month -eq "01" || $Month -eq "03" || $Month -eq "05" || $Month -eq "07" || $Month -eq "08" || $Month -eq "10" || $Month -eq "12") && ($Day == 31)]];
then
#If Dec,31 XXXX
if [[ $Month -eq "12" && Day == 31 ]];
then
Month=01
Day=01
Year=$Year+1
fi
if((Day == 31));
then
Month=$Month+1
Day=1
fi
#Months with 30 days
elif [[ ($Month -eq "04" || $Month -eq "06" || $Month -eq "09" || $Month -eq "11") && ($Day == 30) ]];
then
if(($Day == 30));
then
$Month=$Month+1
Day=01
fi
#The tricky February leap year
elif [[ ($Month -eq "02") && ($Day == 28 || $Day == 29) ]];
then
leapcheck=$(($Year % 4))
if(( leapcheck == 0 && Day == 29 ));
then
Month=$Month+1
Day=01
elif(( $leapcheck != 0 && $Day == 28 ));
then
Month=$Month+1
Day=01
fi
else
(( Day=$Day+1 ))
fi
((count=$count+1))
done
,它将打印20190410到20190416。但是,存在月份和天数递增的问题,其中0被删除,而我的月份根本不递增。我相信肯定有比我的尝试更简单,更好的方法。我是korn shell脚本的新手。