“如果”语句违反了他自己的规则,否则我就这样做

“如果”语句违反了他自己的规则,否则我就这样做

解释: 我正在玩一点脚本,该脚本有助于通知用户有关 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

如有任何问题或意见,我将准备好参加。问候!!

答案1

这行:

sendnot=$(echo ... | mail ... < <(./ssl-cert-check ...))

运行命令echomail然后./ssl-cert-check就在那里,捕获整个批次的输出,即 的输出mail,并将其分配给变量sendnot。这就是为什么您会收到发送的电子邮件,无论如果-陈述。另外,mail这里可能输出不多,因此使用命令替换似乎没有必要。

如果您只想存储命令以供进一步使用,请将其设为一个函数。

send_notice() {
    local subject=$1
    echo "some message" | mail -s "$subject"
}
...
if whatever...; then
    send_notice "subject line..."
fi

$1将是函数的第一个参数。)

此外,该命令还有另一个问题:您同时使用管道和到mail.您无法将两个不同的事物连接到命令的标准输入,因此只有一个适用。如果有多个重定向,它将是最后一个保持有效的重定向;有了管道和重定向,这就是重定向。

所以你的命令实际上等于:

mail -s ... < <(./ssl-cert-check ...)

echo实际上没有做任何事情。

如果你想连接两个命令的输出,你必须这样做:

(echo "some message"; ./ssl-cert-check ...) | mail ...

相关内容