read -t 15 -p "请在15s内输入一个格式为xxxxxxxx日期:" testdate
read -t 10 -p "请在10s内输入一个数:" n
year=${testdate:0:4} #截取输入日期的年份
month=${testdate:4:2} #截取输入日期的月份
d=${testdate:6:2} #截取输入日期的该月天数
function date_n ()
{ days=`expr $d + $n` #将该日期的天数和给的日期天数相加
case $month in #获取该月的天数
01|03|05|07|08|10|12) day=31;;
04|06|09|11) day=30 ;;
02) day=28
#闰年判断: 能被4整除且不能被100整除或能被400整除
[ `expr $year %4 -eq 0` ] && [ `expr $year %100 !-eq 0` ] && day=29 || [ `expr $year % 400 -eq 0` ] && day=29 || day=28;
esac
if [ $days -lt $day ] #当相加后的天数小于该月的天数:年月不变,相加后的天数
then
echo "${year}-${month}-${days}"
#若相加后的天数大于该月的天数:
#天数=相加后天数-该月的天数,month+1: <=12 year不变 ;>12 year+1 month=1. 循环
elif [ $days -gt $day ]
then
days=$[ $days - $day ]
month=`expr $month + 1`
while [ $month -le 12 ] && [ $days -gt $day ] #month <=12
do
days=$[ $days - $day ]
month=`expr $month + 1`
done
echo "${year}-${month}-${days}"
while [ $month -gt 12 ] && [ $days -gt $day ] #month >12
do
year=` expr $year + 1`
month=1
days=$[ $days - $day ]
month=`expr $month + 1`
done
echo "${year}-${month}-${days}"
fi
}
date_n
echo $1 $2 $3 $4
07-13
3215
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
05-20
4305
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)