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!