Chinaunix首页 | 论坛 | 博客
  • 博客访问: 851563
  • 博文数量: 65
  • 博客积分: 534
  • 博客等级: 中士
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-23 14:42
个人简介

世上没有东西可以取代坚毅的地位,才干不能,有才能而失败者比比皆是;天才不能,才华横溢又毫无进取者不胜枚举;单靠教育不能,受过教育但潦倒终生者充斥世间;惟有坚毅与果断者能够无所不能,得到成功。雷?克罗克

文章分类

全部博文(65)

文章存档

2017年(1)

2015年(4)

2014年(1)

2013年(19)

2012年(32)

2011年(8)

我的朋友

分类: LINUX

2012-04-06 00:40:11

闲来无事,写个计算你啥时候过生日的小小的又有趣的脚本玩玩^~^
 
脚本内容如下:
 
#!/bin/bash
 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
 
read -p 'Please input your birthday:' bir 
#注意,上面输入的日期格式必须为20120101这样的,且必须为8个长度。
 
bir_test=$(echo $bir |grep '[0-9]\{8\}') 
test -z $bir_test && echo "The length of the input is less than eight" && exit 0
#用grep截取8位长度的日期,如果用户输入的日期长度不够8个时,则$bir_test为空,如果用户输入的
日期长度超过8个时,那么下面会做判断。
 
bir_s=$(date --date=$bir +%s)
#把用户输入的日期转换成秒
if [ "$?" != 0 ];then
   echo "The date of the input formats length more than eight"
   exit 1
fi
#上面这个if语句的判断条件是,当一条命令执行完后,如果没有出错,则$?=0 否则$?是不为0的。也就是
说,如果date 命令执行成功,则会返回一个0,要是当用户输入的日期长度超过8位时,则date --date=$bir +%s是会报错,故而会返回一个非0数字。所以我们就可以获取$?的值来判断用户输入日期的长度了。
 
now_s=$(date +%s)
#把当前日期转换成秒
 
bir_now_s=$(($bir_s-$now_s))
#用户输入日期的秒减去当前日期的秒
bir_d=$(($bir_now_s/3600/24))
#把两者相减得到的差(秒)转换成天数
bir_h=$(($(($bir_s-$bir_d*3600*24))/3600))
#这是计算余数,然后把余数转换成小时。。这里要注意了,如果不仔细想,你会觉得“$bir_d*3600*24”这不是上一步的相反操作吗?
呵呵,想想为什么要这样做。。。原因很简单,因为“$bir_now_s/3600/24”相除得到的结果是取整数
的,小数部分会丢弃;所以,“$bir_d*3600*24”会小于$bir_now_s
 
if [ -z "$bir" ];then
   echo "No input any value"
   
   #判断用户是否给$bir输入日期或用户输入的日期长度是否达到8个
elif [ "$bir_now_s" -ge 0 ];then
   echo "You have $bir_d days and $bir_h hours for my birthday"
   #如果$bir_now_s值大于等于0的话,就输出“你还有多少天、多少个小时过生日”
elif [ "$bir_now_s" -lt 0 ];then
   echo "You already after $bir_d days and $bir_h hours of birthday"
   #如果$bir_now_s值小于0的话,就输出“你已经过了多少天、多少个小时生日”
fi
 
 
 
 
 
阅读(2565) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~