ログファイルに文字列がない場合は、メールでお問い合わせください。入力検証

ログファイルに文字列がない場合は、メールでお問い合わせください。入力検証

次のbashスクリプトはファイルを読み取り、指定された文字列を検索しようとします。 この場合、肯定的な結果が出なければなりません。 長さが0の場合、つまり文字列が見つからない場合、EメールはPostfix(送信のみ)を使用して送信されます。

#!/bin/bash

results=$(grep "Parameters: {\"id_at_chain\"=>\"001142\", \"articles\"" ~/makt/current/log/production.log)
lines=($results)
if [ -z "$results" ]; then
  echo "array articles 001142 missing" | mail -s "problem 001142" [email protected] [email protected]
fi

私が望むのは、テストするいくつかの検証コードを入れることです(そしてログファイルにダンプすることもできます)。
•ファイルが見つかったかどうか
$results存在するかどうか
•ファイルの長さ$results

できecho $results、期待した結果が得られますが、出力が長さではない
echo -z "$results" ようです。$results

ベストアンサー1

問題は、[コマンドではなく一種のシェル構文であると思うことです。コードを書くもう1つの方法は次のとおりです。

if test -z "$results" ; then

もしそうなら、おそらくもっと明らかに、これは-zorコマンドの表示です。[test

コマンドの出力をgrep名前付き文字列に入れて、その文字列を含む名前付きresults単一要素配列を作成します。linesおそらくあなたはすでにいくつかの計画を持っているでしょう。linesしかし今、これはただの邪魔にすぎません。

あなたのポイントに関しては

  • [ -e ~/makt/current/log/production.log ]ファイルが存在するかどうかを知らせることができます
  • $resultsそれはいつもそこにあります。もちろん空かもしれませんが、あなたはそれを作成しました。
  • ${#results}文字数$results

おすすめ記事