Date
如何知道一個月的最後一個星期日
我嘗試在 ESXI 上編寫腳本,我需要添加“如果每月的最後一個星期日”。我試試
date -d @$(( $(date -d $(date -d @$(( $(date +%s) + 2678400 )) +%Y%m01) +%s) - 604800 )) +%d
它不能工作,但它可以在 Debian 上工作。
現在在 ESXi 上輸出八月
我相信問題是
給定一個特定的日期,我可以確定它是否是該月的最後一個星期日?
而不是更一般的問題
給定一個特定的月份,它的最後一個星期日是哪一天?
鑑於此,我們可以將問題分為兩部分:
- 日期是星期天嗎?
- 是每個月的最後一周嗎?
對於第一部分,測試很簡單:
date -d "$date" +%a # outputs "Sun" for a Sunday
我們可以測試一下:
test $(date -d "$date" +%a) = Sun # success if $date is a Sunday
現在,為了測試是否是該月的最後一周,我們可以在日期上加上一周,看看這是否給了我們下個月的前 7 天之一:
test $(date -d "$date + 1week" +%e) -le 7
由於 的 與 的工作日
$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
測試:
$ ./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!