我尝试在 ESXI 上编写脚本,我需要添加“如果是每月的最后一个星期天”。我试试
date -d @$(( $(date -d $(date -d @$(( $(date +%s) + 2678400 )) +%Y%m01) +%s) - 604800 )) +%d
Run Code Online (Sandbox Code Playgroud)
它不能工作,但它在 Debian 上工作。
在 ESXI 现在输出 8 月
我相信问题是
给定一个特定日期,我能否确定它是否是该月的最后一个星期日?
而不是更普遍的问题
给定一个特定的月份,它的最后一个星期日是哪一天?
鉴于此,我们可以将问题分为两部分:
对于第一部分,测试很简单:
date -d "$date" +%a # outputs "Sun" for a Sunday
Run Code Online (Sandbox Code Playgroud)
我们可以测试一下:
test $(date -d "$date" +%a) = Sun # success if $date is a Sunday
Run Code Online (Sandbox Code Playgroud)
现在,要测试它是否是该月的最后一周,我们可以将一周添加到该日期,看看这是否为我们提供了下个月的前 7 天之一:
test $(date -d "$date + 1week" +%e) -le 7
Run Code Online (Sandbox Code Playgroud)
由于 的工作日与$date + 1week
的相同$date
,我们可以一次性生成两部分测试,并使用 Bash 正则表达式测试:
if [[ $(date -d "$date + 1week" +%d%a) =~ 0[1-7]Sun ]]
then
echo "$date is the last Sunday of the month!"
fi
Run Code Online (Sandbox Code Playgroud)
测试:
$ ./330571.sh 2016-12-01
$ ./330571.sh 2016-12-04
$ ./330571.sh 2016-12-25
2016-12-25 is the last Sunday of the month!
$ ./330571.sh 2017-01-28
$ ./330571.sh 2017-01-29
2017-01-29 is the last Sunday of the month!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5229 次 |
最近记录: |