随着指日可待了一些非常重要的节日,你可能需要提醒你有多少时间去准备。
幸运的是,你可以从得到很多的帮助日期命令。在这篇文章中,我们将研究如何说日期和bash脚本可以告诉你有多少天有今天的一些事件,你期待之间。
这是如何首先一对夫妇的提示,是去工作。该日期命令的引用%j选项是要告诉你今天的日期为1和366 1月1日之间的一个数字,如你所期望,将显示为1和12月31日将是365或366取决于它的闰年。继续尝试。您应该看到这样的事情:
$日期+引用%j 339
你可以,但是,得到日期命令给你一天的最年数任何日通过在其提供日期命令是这样的:
$日期-D “03月18日” +引用%j 077
要记住很重要的一点是,该命令将显示在该日期今年即使该日期是在过去。但是,您可以一年增加了命令和修复:
$日期-D “年04月29” +引用%j $ 119日-D “2020年4月29日” +引用%j 120
在一个闰年,4月29日将是今年的第120天,而不是119个。
如果你想在天倒计时,直到圣诞节,不想与你挂历指纹结束了,你可以用这样的脚本:
#!/ bin / sh的圣诞=`日期-D “12月25日” 今日j` =`日期+%j`天= $(($圣诞 - $ TODAY))+%的情况下,0 $ DAYS)回声“今天是! 圣诞节快乐!”;;[0-9] *)回声 “$ DAYS剩余天数” ;;- [0-9] *)回声 “哎呀,你错过了” ;;ESAC
在此脚本中,我们得到了12月25日,今天白天的数字,然后减去从另一个。如果结果是肯定的,我们会显示剩余天数。如果它是零,我们发出“圣诞快乐”的消息,如果它的负面,我们只是告诉运行他们错过了节日剧本的人。也许他们得到了与蛋酒带走。
case语句是由现成的打印报表,为等于零,那些包含任何数字和那些有启动剩余天数-签(即,在过去的)。
同样的思路可以概括为有人想保持专注的任何日期。事实上,我们可以问我们的运行脚本提供的日期,然后让他们知道多少天保持现在和当时的人。这个脚本的版本就是这样做的。
#!/bin/sh echo -n "Enter event date (e.g., June 6): " read dt EVENT=`date -d "$dt" +%j` TODAY=`date +%j` DAYS=`expr $EVENT - $TODAY` case $DAYS in 0) echo "It's today!";; [0-9]*) echo "$DAYS days remaining";; -[0-9]*) echo "Oops, you missed it";; esac
你有这个脚本的一个问题是,如果运行它的人是希望能找到他们达到一个特殊的日子,次年前多少天必须通过,他们会很失望。即使他们提供了一年,当他们进入日期,日期-d命令仍然只在当年供应天数时,不从现在起到那时的日子。
从现在开始计算今天与一些日期岁之间的天数可以是一个有点棘手。你需要包括所有的几年间,注意那些闰年。
使用UNIX(大纪元)时间
计算现在和一些特殊的日期之间的天数,另一种方法是,以充分利用Unix系统存储日期的方式的优势。如果您转换,因为在1970年1月1日这一天到几天开始的秒数,你可以在这个脚本做到这一点很容易:
#!/bin/bash echo -n "Enter target date (e.g., Mar 18 2021)> " read target_date today=`echo $(($(date --utc --date "$1" +%s)/86400))` target=`echo $(($(date --utc --date "$target_date" +%s)/86400))` days=`expr $target - $today` echo "$days days until $target_date"
为了解释,86400是秒在一天的数量。划分的秒数从纪元开始通过这个数字给我们的天数。
$ ./countdown输入目标日期(例如,2021年3月18日)> 2020年3月18日104天直到2020年3月18日