毎月最後の日曜日を知る方法

毎月最後の日曜日を知る方法

ESXIでスクリプトを作成しようとしていますが、「毎月最後の日曜日の場合」を追加する必要があります。頑張る

date -d @$(( $(date -d $(date -d @$(( $(date +%s) + 2678400 )) +%Y%m01) +%s) - 604800 )) +%d

動作しませんが、Debian では動作します。

ESXI では August が出力されます。

ベストアンサー1

私は問題があると信じています

特定の日付が与えられたら、その月の最後の日曜日であることを確認できますか?

一般的な質問ではなく

特定の月が与えられたら、最後の日曜日はいつですか?

これを考慮すると、問題を2つの部分に分けることができます。

  • 日付は日曜日ですか?
  • 今月の最後の週ですか?

最初の部分のテストは簡単です。

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テストの2つの部分を同時に生成し、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!

おすすめ記事