Мне нужно увеличить дату с указанным c форматом ГГГГММДД (примеры: 20190401 или 20190523). 0 должны быть там для одиночных ди git дней и месяцев.
Я хотел бы, чтобы аргументы строки входного cmd 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.