我有 .csv 文件,其中包含详细信息名称、开始日期、结束日期。从 .csv 文件读取值后,请与今天的日期进行比较,如果在 x 天后到期,则发送电子邮件。从 .csv 读取值后无法获取条件值。你能帮忙吗..
文件.csv:
Name: certificates, StartDate: Thu Dec 17 19:00:00 EST 2020, EndDate: Wed Dec 22 18:59:59 EST 2021
$ cat sample.sh
echo "=======Name, StartDate, EndDate Details============"
while IFS=, read -r Name StartDate EndDate;
do
if [ -z "$EndDate" ]; then
echo "$Validity details not exists"
else
echo "Name: $Name; StartDate: $StartDate; EndDate: $EndDate"
fi
done < file.csv
echo "=======$Name, StartDate, EndDate========"
我的输出低于.. while 循环关闭后不打印输出。
$ sh sample.sh
=======Name, StartDate, EndDate Details============
Name: Name; StartDate: StartDate; EndDate: EndDate
Name: sslcertificates; StartDate: Thu Dec 17 19:00:00 EST 2020; EndDate: Wed Dec 22 18:59:59 EST 2022
=======, , ========
预期输出:我想将 EndDate(.CSV 文件)与今天的日期进行比较,如果 30 天后到期,则发送电子邮件
提前致谢..
答案1
您必须在读取循环内使用变量。众所周知(并且有据可查)的事实是,读取的变量值将在循环外丢失其值。
你需要EndDate - Today
以秒为单位进行算术。
假设你有 GNU 日期,你可以这样做:
$ cat sample.sh
echo "=======Name, StartDate, EndDate Details============"
TodayDateSec="$(date +'%s')"
while IFS=, read -r Name StartDate EndDate;
do
if [ -z "$EndDate" ]; then
echo "$Validity details not exists"
else
echo "Name: $Name; StartDate: $StartDate; EndDate: $EndDate"
EndDateSec="$(date -d "$EndDate" +'%s')";
DiffDays="$(( (EndDateSec - TodayDateSec)/86400 ))"
if [[ "$DiffDays" -lt 30 ]]; then
echo "Email needs to be sent"
fi
fi
done < file.csv
echo "=======$Name, $StartDate, $EndDate========"
循环后读取变量的值仍然为空,但发送电子邮件的需求已经经过测试(并打印)。