Content #
我们将编写一个shell脚本来计算两个日期之间相隔的天数,允许用户以date命令能识别的任何格式来指定日期。
首先,将两个指定日期保存在变量中:
$date1="Jan 1, 2020"
$date2="May 1, 2020"
执行日期运算可不是件容易事,你需要知道哪个月份是28天,哪个月份是30天或 31天,还需要知道哪一年是闰年。不过好在可以从date命令那里寻求帮助。
date命令允许使用-d选项指定特定日期(以任意格式),然后以我们定义的其他格式输出该日期。为了执行日期运算,要利用纪元时间(epoch time)这个 Linux特性。纪元时间将时间指定为1970年1月1日午夜后的整数秒(这是一个古老的Unix标准)。因此,要获得2020年1月1日的纪元时间,可以这么做:
$date -d "Jan 1, 2020" +%s
1577854800
我们使用这种方法获得两个日期的纪元时间,然后相减,得到两个日期之间相隔的秒数。在此,将该值除以一天中的秒数(每分钟60秒、每小时60分钟、每天24 小时),以获得两个日期之间的天数差异。
使用命令替换将date命令的输出保存在变量中:
$time1=$(date -d "$date1" +%s)
一旦获得了两个日期的纪元时间,剩下的就是使用expr命令来计算差值了。
$ cat mydate.sh
#!/bin/bash
# calculate the number of days between two dates
date1="Jan 1, 2020"
date2="May 1, 2020"
time1=$(date -d "$date1" +%s)
time2=$(date -d "$date2" +%s)
diff=$(expr $time2 - $time1)
secondsinday=$(expr 24 \* 60 \* 60)
days=$(expr $diff / $secondsinday)
echo "The difference between $date2 and $date1 is $days days"
设置合适的权限并运行脚本:
$ chmod u+x mydate.sh
$ ./mydate.sh
From #
Linux命令行与shell脚本编程大全