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

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

文章分类

全部博文(65)

文章存档

2017年(1)

2015年(4)

2014年(1)

2013年(19)

2012年(32)

2011年(8)

我的朋友

分类: LINUX

2012-02-16 10:58:44

    我是个Linux入门“水手”,身上只有一本《鸟哥的linux私房菜基础篇》,把这本书当成我的进入
 
Linux领域的“葵花宝典”。鸟哥写的这本书讲的真不错,个人来说是新手开始学习Linux最最首选的一本
 
参考书,相信很多涉入了linux领域的新手或者高手,对此都深有感受吧。
 
     今天看到了学习如何编写脚本的那一章节,里面有个脚本编写实例,题目是:
 
计算军人还有多少天可以退伍了。
 
脚本可完成的内容:
 
1.让使用者(军人)输入他退伍的日期。
2.再由现在的日期比对退伍的日期。
3.由两个日期的比较来显示(还需多久)才能退伍的字样。
 
---------------------以下是鸟哥编写的这个脚本内容----------------------------
  1. #!/bin/bash
  2. 2 #program:
  3. 3 # you input your demobilization date,i calculate how many days
  4. 4 # before you demobilize.
  5. 5 #history:
  6. 6 #20120216 bobower first release
  7. 7 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. 8 export PATH
  9. 9
  10. 10
  11. 11 read -p "please input your demobilization.format like this's:>( 20121212 ):" date2
  12. 12
  13. 13
  14. 14 date_d=$(echo $date2 |grep '[0-9]\{8\}')
  15. 15
  16. 16
  17. 17
  18. 18 if [ "$date_d" == "" ]; then
  19. 19
  20. 20 echo "you input the wrong date format...." && exit 1
  21. 21
  22. 24 fi
  23. 25
  24. 26 declare -i date_dem=`date --date="$date2" +%s`
  25. 27 declare -i date_now=`date +%s`
  26. 28 declare -i date_total_s=$(($date_dem-$date_now))
  27. 29 declare -i date_d=$(($date_total_s/60/60/24))
  28. 30
  29. 31 if [ "$date_d" -lt "0" ]; then
  30. 32 echo "you had been demobilization before: $(($date_d*-1))"
  31. 33
  32. 34 else
  33. 35
  34. 36 declare -i date_h=$(($(($date_total_s-$date_d*60*60*24))/60/60))
  35. 37
  36. 38 echo "you will demobilize after $date_d days and $date_h hours."
  37. 39 fi

 

试着运行一下,发现确实可以达到题目的要求。里面规定用户输入的日期格式只能为”20000101“这种的,

还做了一个条件判断,判断一下当输入的日期长度没有达到8个字符时,则提示”输入的日期格式错误“的

字样。。。。但鸟哥没有判断如果输入的日期长度超过8个字符时,该怎么办。所以 个人觉得这个脚本有点

这个缺陷。。呵呵,以下这个脚本是我通过鸟哥教我的方法弥补的这个缺陷。

 

  1. 1 #!/bin/bash
  2. 2 #program:
  3. 3 # you input your demobilization date,i calculate how many days
  4. 4 # before you demobilize.
  5. 5 #history:
  6. 6 #20120216 bobower first release
  7. 7 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. 8 export PATH
  9. 9
  10. 10
  11. 11 read -p "please input your demobilization.format like this's:>( 20121212 ):" date2
  12. 12
  13. 13
  14. 14 date_d=$(echo $date2 |grep '[0-9]\{8\}')
  15. 15
  16. 16 wc_m=$((`echo $date_d |wc -m`-1))
  17. 17
  18. 18 if [ "$date_d" == "" ]; then
  19. 19
  20. 20 echo "you input the wrong date format...." && exit 1
  21. 21 elif [ "$wc_m" -gt 8 ]; then
  22. 22 echo "you input date format very long...."
  23. 23 exit 2
  24. 24 fi
  25. 25
  26. 26 declare -i date_dem=`date --date="$date2" +%s`
  27. 27 declare -i date_now=`date +%s`
  28. 28 declare -i date_total_s=$(($date_dem-$date_now))
  29. 29 declare -i date_d=$(($date_total_s/60/60/24))
  30. 30
  31. 31 if [ "$date_d" -lt "0" ]; then
  32. 32 echo "you had been demobilization before: $(($date_d*-1))"
  33. 33
  34. 34 else
  35. 35
  36. 36 declare -i date_h=$(($(($date_total_s-$date_d*60*60*24))/60/60))
  37. 37
  38. 38 echo "you will demobilize after $date_d days and $date_h hours."
  39. 39 fi

 

只是在前面多增加了一个变量”$wc_m“和判断这个"$wc_m"的字符个数是否大于8.

其它的内容都是原封不动的啦。现在试着运行下这个脚本,不论使用都输入的字符个数大于8还是小于8,都

可以很好的做出判断了。。。。。

 

阅读(1547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~