在给定假期列表的 Bash 中打印下一个工作日

在给定假期列表的 Bash 中打印下一个工作日

我想生成一个简单的文件日期.txt包含以下两个日期:

今日交易日期 下一交易日期

交易日仅限于不属于下列给定假日列表的工作日:

cat holiday_list.txt
20190304
20190321
20190417
20190419
20190429
20190501
20190605
20190812
20190815
20190902
20190910
20191002
20191008
20191028
20191112
20191225

例如:如果我们在 2019 年 8 月 14 日今天运行脚本-(请注意,2019 年 8 月 15 日在 holiday_list.txt 中为 20190815)则输出将如下所示:

14-Aug-2019 16-Aug-2019

我搜索了一下,发现了类似的问题关联获取下一个工作日。

last_day=20190426
 date -d "$last_day +$( if [ `date -d $last_day +%w` == 5 ]; then echo 3; elif [ `date -d $last_day +%w` == 6 ]; then echo 2; else echo 1; fi ) days" +"%Y%m%d"

我已使用上述代码在下面的脚本中生成 dates.txt 来创建 dates.txt

#!/bin/bash

last_day=`date +%Y%m%d`

last_day=`date +%d-%b-%Y`
printf $last_day > dates.txt
printf " " >> dates.txt
date -d "$last_day +$( if [ `date -d $last_day +%w` == 5 ]; then echo 3; elif [ `date -d $last_day +%w` == 6 ]; then echo 2; else echo 1; fi ) days" +"%d-%b-%Y" >> dates.txt

该脚本将今天的日期和下一个工作日(即工作日)打印在文件中。但是,当我尝试运行 if 条件来检测 holiday_list.txt 文件中是否存在日期时,即使 holiday_list.txt 中存在 next_day 字符串,脚本也总是进入 else 部分

if grep -Fxq "$next_day" holiday_list.txt
then
    Do this

else 
    Do other thing
fi

如果我遗漏了什么请告诉我

答案1

一般来说,人们会做类似的事情:

date_is_ok=0
while [[ $date_is_ok = 0 ]] ; do
    new_date=generate_the_date
    grep -q "$new_date" holiday_list.txt
    date_is_ok=$?
done

利用grep

−q        Quiet.  Nothing  shall be written to the standard output, regardless of matching
          lines. Exit with zero status if an input line is selected.

相关内容