我正在尝试添加一个脚本来检查文件是否到达,我想排除某些日子(12月2日,12月26日,感恩节后的每个星期一,感恩节后的第二天)我已经检查了除感恩节以外的所有内容在每年11月4日(星期四)以后的中频情况下,很难进行一天的检查。
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"
答案 0 :(得分:4)
您可以使用grape lemon 3
apple banana 4
banana pie 1
和ncal
来获取第四个星期四,然后添加一个:
awk
答案 1 :(得分:1)
第4个星期四可能是22日至28日。然后,下一个星期五是23日至29日。
for d in {23..29}
do if [[ Fri == $(date -d 11/$d +%a) ]]
then echo $d; break;
fi
done
答案 2 :(得分:1)
您可以在此处使用一个技巧:每月的第一个[任何工作日]始终在1日至7日之间,第二个在8日至14日之间,第三个在15日至21日之间...以及第四个在22日和28日之间。因此,感恩节将始终位于11月22日至28日之间的星期四,感恩节之后的第二天将位于11月23日至29日之间的星期五。因此,您可以像这样检查它:
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"
,因为[ ]
没有<=
和>=
运营商。{ ;}
对感恩节后的测试进行逻辑分组;您可以改用( )
,但这会创建不必要的子shell。==
代替了=
测试–在这种情况下,标准的标准是均等。 bash将double-equal理解为同义词,但是如果您指望bash,最好还是使用[[ ]]
。答案 3 :(得分:0)
如果您的- bar: hello
- bar: another
pint: guiness
- bar: second
pint: ""
命令支持date
选项,请尝试以下操作:
-d
然后输出为23。
答案 4 :(得分:0)
使用@GordonDavisson的观察,感恩节将在11月23日至29日的星期五进行,并使用Bash的=~
正则表达式:
if [ "$DAY" == "Mon" ] || [ "$MD" == "0102" ] || [ "$MD" == "1226" ] || # split to
[ "$DAY" == "Fri" ] && [[ "$MD" =~ 112[3-9] ]] # emphasize
then
echo "Files Not Expected - No Alerts Raised"
else
...
答案 5 :(得分:0)
如前所述,第四个星期四位于22到28之间。通过一些模运算,您可以得到
$ date -d "2019-11-22 + $(( (4 + 7 - $(date -d '2019-11-22' +%w))%7)) days"