shell指令碼判斷某一天是否是當月的最後乙個周四

2021-09-02 01:13:08 字數 1968 閱讀 4043

shell指令碼判斷某一天是否是當月的最後乙個周四

最近遇到了這樣的乙個需求,要求在每個月的最後乙個周四加三天來執行乙個固定的指令碼,於是就因為判斷最後乙個周四用了很久,在此記錄一下。

整體的思路如下:

將當前的日期減去三天後,得到三天前的日期,判斷得到的三天前的日期是否是該日期所在月的最後乙個周四。

具體的實現

先建立一些變數以供後續的使用

//表示三天前的日期所在的年:2018

year=

$(date -d "-3 day"+%

y)//表示三天前的日期所在的月:11

month=

$(date -d "-3 day"

+%m)

//表示三天前的日期所在的日:27

day=

$(date -d "-3 day"

+%d)

//表示三天前的日期是星期幾

week=

$(date -d "-3 day"

+%u)

//表示三天前的日期年月日形式:20181127

daytime=

$(date -d "-3 day"+%

y%m%d)

//表示三天前的日期的年月表示形式:201811

month1=$

//三天前所在的月的最後一天

monthendday=$

$(cal $ $

|perl -

0nle 'print+(split)[-1]'

)//最後一天是週幾

lastday_week=

$(day -d $

+%u)

準備工作 完成,現在開始進行判斷。我的判斷思路是這樣的,先找出來指定日期坐在月的最後一周,然後判斷該日期是否在最後一周內,如果在的話,再判斷是否是周四。

但是這樣的就存在乙個問題,如果這個月的最後一天恰好是周一,那麼取最後一周的資料時,只能取到周一,將無法找到最後乙個周四,遇到這種情況就需要取出最後兩周。因此需要分兩種情況實現:

這個月的最後一天大於等於周四,就取最後一周進行比較。

這個月的最後一天小於周四,就取這個月的最後兩天進行比較。

//判斷該月的最後一天的星期數是否大於4

if[ $lastday_week -ge 4

];then

//取最後一周的所有日期,例如2023年11的最後一周是26 27 28 29 30,-m表示周一是一周的開始

lastweek=

$(cal -m "$month"

"$year"

| sed '/^$/d'

| tail -1)

//判斷指定的日期是否在最後一周的範圍內

justd=

$(echo "$"

| grep "$"

| wc -l)

//如果是1,表示在該範圍內,是0表示不在

if[ $

-eq 1

];then

//如果是最後一周,判斷只當日期是否是周四

if[ $

-eq 4

];then

sh lastthursday.sh

fifi

else

//取當月的最後兩周

lastweek=

$(cal -m "$month"

"$year"

| sed '/^$/d'

| tail -2)

justd=

$(echo "$"

| grep "$"

| wc -l)

if[ $

-eq 1

];then

if[ $-eq 4

];then

sh lastthursday.sh

fifi

fi

至此,該需求完成。

判斷某一天是這一年的第多少天

先判斷是否是閏年 def leap year year 判斷是否為閏年 return year 4 0 and year 100 0 or year 100 0再計算天數 def day of year year,month,day 計算傳入的日期是這一年的第多少天 days of month 31...

求某一天是星期幾

蔡勒 zeller 公式 歷史上的某一天是星期幾?未來的某一天是星期幾?關於這個問題,有很多計算公式 兩個通用計算公式和一些分段計算公式 其中最著名的是蔡勒 zeller 公式。即w y y 4 c 4 2c 26 m 1 10 d 1 公式中的符號含義如下,w 星期 c 世紀 1 y 年 兩位數 ...

求某一天是星期幾(模板)

題目描述 編一程式實現 由輸入 年以後的任意乙個日期後,計算機能列印出該日期是星期幾。日期肯定合法,絕不會出現類似 年 月 日的情況 已知 年 月 日是星期二。輸入 年 月 日 日期有3個整數組成,中間用空格隔開 輸出 乙個整數星期 星期用1 2 3 4 5 6 7表示 若是星期日就輸出7 樣例 輸...