说明: 我正在使用一个脚本来帮助通知用户 SSL 证书到期。如果证书有不到 30 天到期,这将通知用户,如果不是什么都不做。
但是由于某些奇怪的原因,使用更大的常数进行验证,甚至电子邮件也在发送,这不应该发生。
这是代码:
#!/bin/ksh
legend="The next certificate almost expires.\n URL: url.com "
count=30
daysleft=$(./ssl-cert-check -d /etc/ssl/certs/cert.cer | awk '{print $6}' | tail -n 1);
#daysleft=50 #Constant to do some test
sendnot=$(echo $legend | mail -s "url.com SSL cert Expiration" [email protected] < <(./ssl-cert-check -d /etc/ssl/certs/cert.cer))
if [[ $daysleft -lt $count ]];
then
echo "Sending note"
echo $sendnot
else
echo "Doing nothing..."
fi
daysleft
用常数做测试,它的工作原理;但即便如此,无论如何都会将笔记发送给用户。
编辑: 输出:
./ssl-cert-check -d /etc/ssl/certs/cert.cer | awk '{print $6}' | tail -n 1
is 9
任何问题或意见我都会准备好参加。问候!!
这一行:
运行命令
echo
,mail
然后./ssl-cert-check
就在那里,并捕获整个批次的输出,即 的输出mail
,并将其分配到变量中sendnot
。这就是为什么无论if语句如何都会发送电子邮件的原因。另外,mail
这里可能输出不多,所以使用命令替换似乎没有必要。如果您只想存储命令以供进一步使用,请将其设为函数。
(
$1
将是函数的第一个参数。)此外,该命令还有另一个问题:您同时使用管道和输入重定向到
mail
. 您不能将两种不同的东西连接到命令的标准输入,所以只有一个适用。如果有多个重定向,它将是最后一个保持有效的重定向;使用管道和重定向,这就是重定向。所以你的命令实际上等于:
即
echo
并没有真正做任何事情。如果要连接两个命令的输出,则必须执行以下操作: