用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


...全文
1160 11 打赏 收藏 转发到动态 举报
写回复
用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,125

社区成员

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

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