首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得11月4日星期四的壳牌脚本

获得11月4日星期四的壳牌脚本
EN

Stack Overflow用户
提问于 2018-12-18 20:55:34
回答 6查看 269关注 0票数 2

我试图添加一个脚本来检查文件到达,我想排除一些日子(1月2日,12月26日,每个星期一,感恩节之后的一天),除了感恩节之外,我所有的支票都有,这在每年11月4日星期四之后的情况下做检查有点棘手。

代码语言:javascript
复制
CURRENT_DATE=$(TZ=America/New_York date +%Y%m%d)
echo $CURRENT_DATE

Year=$(TZ=America/New_York date +%Y)
echo $Year

MD=$(TZ=America/New_York date +%m%d)
echo $MD

if [ "$DAY" == "Mon" ] || [ "$MD" == "0102" ] || [ "$MD" == "1226" ];
then
   echo "Files Not Expected - No Alerts Raised"
else
   echo "Files Expected"
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-12-18 21:02:14

您可以使用ncalawk获得第四个星期四,然后添加一个:

代码语言:javascript
复制
$ ncal -m 11  
    November 2018     
Mo     5 12 19 26   
Tu     6 13 20 27   
We     7 14 21 28   
Th  1  8 15 22 29   
Fr  2  9 16 23 30   
Sa  3 10 17 24      
Su  4 11 18 25      
$ ncal -m 11  | awk '/^Th/{print $5+1}'
23
票数 4
EN

Stack Overflow用户

发布于 2018-12-18 21:32:50

第四个星期四可能是22日到28日。那么下个星期五是23到29。

代码语言:javascript
复制
for d in {23..29}
do if [[ Fri == $(date -d 11/$d +%a) ]]
   then echo $d; break;
   fi
done
票数 1
EN

Stack Overflow用户

发布于 2018-12-18 22:56:23

这里有一个窍门:一个月中的第一个工作日总是在第一到第七天,第二次是在第八到十四号,第三次是在十五号到二十一.第四条在22号到28号之间。因此,感恩节总是在11月22日至28日之间的星期四,感恩节后的第二天是11月23日至29日的星期五。因此,您可以这样检查它:

代码语言:javascript
复制
if [ "$DAY" = "Mon" ] || [ "$MD" = "0102" ] || [ "$MD" = "1226" ] || \
    { [ "$DAY" = "Fri" ] && [ "$MD" \> "1121" ] && [ "$MD" \< "1130" ]; }; then

备注:

  • 我假设$DAY设置为类似于$(TZ=America/New_York date +%a)的东西。我建议您改用一周中的数字日,这样它就可以在非英语地区使用。
  • 我还建议改用小写或混合大小写变量名称。有许多具有特殊意义的所有大写变量,不小心重用它们会导致奇怪的结果。
  • 我使用\> "1121"\< "1130"而不是\>= "1122"\<= "1130",因为[ ]没有<=>=操作符。
  • 我使用{ ;}对感恩节后的测试进行逻辑分组;您可以使用( ),但这会创建一个不必要的子subshell。
  • 最后,我将==测试替换为= --在这种情况下,单等号是标准的;bash将双等理解为同义词,但如果您指望bash,最好还是使用[[ ]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53840925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档