用shell scripts 脚本 计算"您还有几天就过生日"

清溪蓝郁 2010-12-31 04:54:23
先在此说明,我是个新手,自学的Linux shell编程.

以下是我的一点见解,觉得很不完善,希望高手们能够给予指导.

觉得应该可以用很简洁的办法解决这个问题.

#!/bin/bash
# Using brithday .......
#liyy 2010/12/30
declare date=`date`
echo "nowdate is $date"
echo `date|cut -c7-13`
now=`date|cut -c7-13`
nowmonth=`date|cut -c7-8`
echo "nowmonth==>$nowmonth"
nowday=`date|cut -c11-12`
echo "nowday==>$nowday"
declare -i birthmonth
declare -i birthday
echo "please input your birthmonth."
read birthmonth
echo "please input your birthday."
read birthday
declare -i ddmonth=`expr $birthmonth - $nowmonth`
declare -i ddday=`expr $birthday - $nowday`
echo "ddmonth==>$ddmonth"
echo "ddday==>$ddday"

if [ "$ddmonth" -eq "0" ]; then
if [ "$ddday" -gt "0" ]; then
echo "after $ddday day ,you will birthday"
fi
elif [ "$ddmonth" -gt "0" ] && [ "$ddday" -gt "0" ]; then
echo "after $ddmonth month + $ddday day will your birthday"
elif [ "$ddmonth" -gt "0" ] && [ "$ddday" -lt "0" ]; then
echo "after `expr $ddmonth - 1` month+`expr 30 - $nowday + $birthday` day will your birthday"
else
echo "this year your birthday is over ."
fi


...全文
1189 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
清溪蓝郁 2011-01-05
  • 打赏
  • 举报
回复
一楼,谢谢你的打击。。。。。
在打击中成长,是我的目标。。。

如果想要求鼓励,也不会来CSDN了,呵呵。。
greenweather 2011-01-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 masmaster 的回复:]

引用 1 楼 linsen_519 的回复:
求鼓励帖?

LZ的脚本条理清晰,主次分明,重点突出,井井有条;简洁中不失严谨,高效中不失可靠。同时又能做到前后照应,图文并茂且寓教于乐,实为居家旅行,教育开发的经典之作~~~

向你学习~~~回帖之经典马屁!
[/Quote]
太经典了,呵呵
sewinten 2011-01-01
  • 打赏
  • 举报
回复
学习了,楼上的真热心。
Linux-Torvalds 2011-01-01
  • 打赏
  • 举报
回复
不过新手可以写出这东西来,不错啦。
Linux-Torvalds 2011-01-01
  • 打赏
  • 举报
回复
你这脚本太烂了。这个必须狠狠批一下。
#!/bin/bash
# Using brithday .......
#liyy 2010/12/30
=================================================
头部的内容过于简单。还应该包括更加详细的注释,要么一点也没有。实话,我不喜欢写注释。另外版本信息也应该加入的。
declare date=`date`
这里要delcare干嘛?date是系统中的一个命令,用一个变量名号码?比如today
echo "nowdate is $date"
echo `date|cut -c7-13`
这里对date的命令不深入。注意date还有非常多的格式控制的。+%Y%m%D之类的。
now=`date|cut -c7-13`
nowmonth=`date|cut -c7-8`
echo "nowmonth==>$nowmonth"
nowday=`date|cut -c11-12`
上面那几个通过cut来的,看不下去了。繁琐。
echo "nowday==>$nowday"
declare -i birthmonth
declare -i birthday
变量不申明用也可以吧?
echo "please input your birthmonth."
read birthmonth
echo "please input your birthday."
read birthday
declare -i ddmonth=`expr $birthmonth - $nowmonth`
declare -i ddday=`expr $birthday - $nowday`
echo "ddmonth==>$ddmonth"
echo "ddday==>$ddday"

if [ "$ddmonth" -eq "0" ]; then
if [ "$ddday" -gt "0" ]; then
echo "after $ddday day ,you will birthday"
fi
elif [ "$ddmonth" -gt "0" ] && [ "$ddday" -gt "0" ]; then
echo "after $ddmonth month + $ddday day will your birthday"
elif [ "$ddmonth" -gt "0" ] && [ "$ddday" -lt "0" ]; then
echo "after `expr $ddmonth - 1` month+`expr 30 - $nowday + $birthday` day will your birthday"
else
echo "this year your birthday is over ."
fi
masmaster 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 linsen_519 的回复:]
求鼓励帖?

LZ的脚本条理清晰,主次分明,重点突出,井井有条;简洁中不失严谨,高效中不失可靠。同时又能做到前后照应,图文并茂且寓教于乐,实为居家旅行,教育开发的经典之作~~~
[/Quote]
向你学习~~~回帖之经典马屁!
foxconndmd 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 linsen_519 的回复:]

求鼓励帖?

LZ的脚本条理清晰,主次分明,重点突出,井井有条;简洁中不失严谨,高效中不失可靠。同时又能做到前后照应,图文并茂且寓教于乐,实为居家旅行,教育开发的经典之作~~~
[/Quote]
油菜
freetstar 2010-12-31
  • 打赏
  • 举报
回复
支持!
justkk 2010-12-31
  • 打赏
  • 举报
回复
示例:
#!/bin/ksh

a=$(date -d"2010/10/10" +%j)
b=$(date +%j)

echo $((a-b))

为简化问题,没有考虑生日已过的情形
lz可以自己添加代码,如果差值<0,可以把年份+1,2010+1=2011,即计算下一个生日
justkk 2010-12-31
  • 打赏
  • 举报
回复
可以把两个日期(生日、当天日期),转换为一年之内的天数,然后相减
假定你的生日是2010/10/10

转换为天数
a=$(date -d"2010/10/10" +%j)

当天对应的天数
b=$(date +%j)

差值echo $((a-b))
linsen_519 2010-12-31
  • 打赏
  • 举报
回复
求鼓励帖?

LZ的脚本条理清晰,主次分明,重点突出,井井有条;简洁中不失严谨,高效中不失可靠。同时又能做到前后照应,图文并茂且寓教于乐,实为居家旅行,教育开发的经典之作~~~

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧