次の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
もしそうなら、おそらくもっと明らかに、これは-z
orコマンドの表示です。[
test
コマンドの出力をgrep
名前付き文字列に入れて、その文字列を含む名前付きresults
単一要素配列を作成します。lines
おそらくあなたはすでにいくつかの計画を持っているでしょう。lines
しかし今、これはただの邪魔にすぎません。
あなたのポイントに関しては
[ -e ~/makt/current/log/production.log ]
ファイルが存在するかどうかを知らせることができます$results
それはいつもそこにあります。もちろん空かもしれませんが、あなたはそれを作成しました。${#results}
文字数$results