「if」ステートメントは独自の規則に違反します。そうでなければ私はそうします。

「if」ステートメントは独自の規則に違反します。そうでなければ私はそうします。

説明する: 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 ...))

走るcommandを実行し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関数の最初のパラメータになります。)

また、コマンドには別の問題があります。パイプとtoの両方を使用しているため、mailコマンドの標準入力に2つの異なる項目を関連付けることができないため、1つだけが適用されます。リダイレクトが複数ある場合、パイプとリダイレクトを使用すると、最後の有効なリダイレクトになります。

したがって、あなたのコマンドは実際には次のようになります。

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

つまり、echo実際に何もせずに。

両方のコマンドの出力を接続するには、次の手順を実行する必要があります。

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

関連情報