我试图添加一个脚本来检查文件到达,我想排除一些日子(1月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"发布于 2018-12-18 21:02:14
您可以使用ncal和awk获得第四个星期四,然后添加一个:
$ 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发布于 2018-12-18 21:32:50
第四个星期四可能是22日到28日。那么下个星期五是23到29。
for d in {23..29}
do if [[ Fri == $(date -d 11/$d +%a) ]]
then echo $d; break;
fi
done发布于 2018-12-18 22:56:23
这里有一个窍门:一个月中的第一个工作日总是在第一到第七天,第二次是在第八到十四号,第三次是在十五号到二十一.第四条在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",因为[ ]没有<=和>=操作符。{ ;}对感恩节后的测试进行逻辑分组;您可以使用( ),但这会创建一个不必要的子subshell。==测试替换为= --在这种情况下,单等号是标准的;bash将双等理解为同义词,但如果您指望bash,最好还是使用[[ ]]。https://stackoverflow.com/questions/53840925
复制相似问题