WHCSRL 技术网

Linux的shell计算下一次生日

问题描述

在Linux终端下编写一个shell脚本,要求通过输入一个生日日期,计算下一次生日还有多少天。

代码编写

  1. #!/bin/bash
  2. #xueqijun
  3. #filename:birth.sh
  4. #输入一个日期
  5. read -p "Input your birthday like 20010311:" date1
  6. #利用正则表达式判断日期格式是否正确
  7. if [ "$(echo $date1 | grep "[0-9]{8}")" == "" ];then
  8. echo "Input error!"
  9. exit 1
  10. fi
  11. m=`date --date="$date1" +%%m`#生日的月份
  12. d=`date --date="$date1" +%%d`#生日的天数
  13. y=`date +%%Y`#现在的年份
  14. date_now=`date +%%s`#现在距离1970年1月1日的秒数
  15. birth=`date --date="$y$m$d" +%%s`#今年生日的日期距离1970年的秒数
  16. internal=$(($birth-$date_now))#计算两者之差
  17. #判断当天是否是生日
  18. if [ "$((internal/60/60/24))" -eq "0" ] ; then
  19. echo -e "33[32;5mToday is your birthday.Happy birthday to you!33[0m"
  20. exit 0
  21. #判断生日是否已过
  22. else if [ "$internal" -lt "0" ] ;then
  23. birth=`date --date="$(($y+1))$m$d" +%%s`
  24. internal=$(($birth-$date_now))
  25. fi
  26. #输出距离下次生日剩余天数
  27. echo -e "There are 33[32;1m$((internal/60/60/24+1))33[0m days when your birthday comes."
  28. exit 0
  29. fi

样例输入

 

 

 

 

注意问题

1.if [ "$internal" -lt "0" ] ;then判断中[  ]中间要留有空格

2.注意反引号`和${}的区别,反引号``先执行其中的命令,将结果赋值

推荐阅读