我想生成一个简单的文件日期.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.