Linux的shell计算下一次生日
问题描述
在Linux终端下编写一个shell脚本,要求通过输入一个生日日期,计算下一次生日还有多少天。
代码编写
- #!/bin/bash
- #xueqijun
- #filename:birth.sh
- #输入一个日期
- read -p "Input your birthday like 20010311:" date1
- #利用正则表达式判断日期格式是否正确
- if [ "$(echo $date1 | grep "[0-9]{8}")" == "" ];then
- echo "Input error!"
- exit 1
- fi
- m=`date --date="$date1" +%%m`#生日的月份
- d=`date --date="$date1" +%%d`#生日的天数
- y=`date +%%Y`#现在的年份
- date_now=`date +%%s`#现在距离1970年1月1日的秒数
- birth=`date --date="$y$m$d" +%%s`#今年生日的日期距离1970年的秒数
- internal=$(($birth-$date_now))#计算两者之差
- #判断当天是否是生日
- if [ "$((internal/60/60/24))" -eq "0" ] ; then
- echo -e " 33[32;5mToday is your birthday.Happy birthday to you! 33[0m"
- exit 0
- #判断生日是否已过
- else if [ "$internal" -lt "0" ] ;then
- birth=`date --date="$(($y+1))$m$d" +%%s`
- internal=$(($birth-$date_now))
- fi
- #输出距离下次生日剩余天数
- echo -e "There are 33[32;1m$((internal/60/60/24+1)) 33[0m days when your birthday comes."
- exit 0
- fi
-
样例输入
注意问题
1.if [ "$internal" -lt "0" ] ;then判断中[ ]中间要留有空格
2.注意反引号`和${}的区别,反引号``先执行其中的命令,将结果赋值
推荐阅读