你何时退伍呢?--让我帮你来计算

来源:互联网 发布:上帝粒子 知乎 编辑:程序博客网 时间:2024/04/20 07:55

 举例来说,在台湾当兵是国民应尽的义务,不过,在当兵的时候总是很想要退伍的! 那我们可以写个脚本程序来跑,让使用者输入他的退伍日期,让你去帮他计算还有几天才退伍?

由于日期是要用相减的方式来处置,所以我们可以透过使用 date 显示日期与时间,将他转为由 1970-01-01 累积而来的秒数, 透过秒数相减来取得剩余的秒数后,再换算为日数即可。整个脚本的制作流程有点像这样:

  1. 先让使用者输入他们的退伍日期;
  2. 再由现在日期比对退伍日期;
  3. 由两个日期的比较来显示『还需要几天』才能够退伍的字样。

似乎挺难的样子?其实也不会啦,利用『date --date="YYYYMMDD" +%s 』转成秒数后,接下来的动作就容易的多了!如果你已经写完了程序,对照底下的写法试看看:

 

ps:
date_d=$(echo $date2 | grep -E '^[0-9]{8}$')的表达方式其实可以有好多种,例如:

date_d=$(echo $date2 | egrep -e '^[0-9]{8}$')

date_d=$(echo $date2 | grep  '^[0-9]\{8\}$')

其实之前脚本上面的写法是date_d=$(echo $date2 | grep  '[0-9]\{8\}'),但是我发现不大严谨,只要那个日期的数位大于匹配的个数,都会输出那个日期,然后经过和朋友们的讨论,最终想到了这个办法,不过这个貌似还不够严谨,如果你要追求完美,那么我们就是用下面的表达式吧!

date_d=$(echo $date2 |grep -E '^[0-9]{4}[0,1][0-9][0-3][0-9]$'

还有最好按照declare -i date_h=$(($(($date_total_s-$date_day*60*60*24))/60/60))这样的格式写~

其实你还可以更精确,但是有什么意思呢,我们已经要求有规则,如果你要是不按照规则办事,一切不就乱了吗,O(∩_∩)O~



=======================下面出错

sh11.sh: line 20: declare: date --date="$date2" + %s: syntax error in expression (error token is "date="$date2" + %s")
sh11.sh: line 21: declare: date + %s: syntax error: operand expected (error token is "%s")
sh11.sh: line 22: -: syntax error: operand expected (error token is "-")


20 declare -i date_dem='date --date="$date2" + %s'
21 declare -i date_now='date + %s'

语法和命令使用上的错误
不要用'xxx' 用`xxx` 或者$() 你date命令使用错误。

0 0
原创粉丝点击