2011-07-19 5 views
0

"test:argument expected"というメッセージで時々エラーが発生するunixスクリプトがあります。次のコード行は、スクリプト内の唯一のif文です。test:-zオプションを使用すると引数が必要になる

if [ -z `grep ">Success<" $OUTFILE` ] 

$ OUTFILEは、スクリプトの実行開始時に作成されるファイルです。スクリプトは、出力をOUTFILEに書き込むWebサービスを呼び出します。アウトファイルに「成功」​​がある場合は、Webサービスが正常に完了したことを意味します。

このスクリプトは10分ごとに呼び出され、ほとんどの場合、上記のロジックは完全に正常に機能します。しかし時には、テスト引数でスクリプトのエラーが発生すると予想されるエラーが発生し、このエラーの原因を特定できません。他の誰かが同様の問題に直面していますか?誰かがこの問題への指針を提供することができれば幸いです。

ありがとうございました。

答えて

3

`command`文字列を二重引用符で囲まなかったため、文字列が見つからない場合、コマンドはエラー(パラメータがありません)であるif [ -z ]になります。 (それはには何もないに展開され、空のパラメータではありません)。

if grep ">Success<" $OUTFILE 

あなたはgrep-sと(GNU grep場合)-qオプションをすることもできます。

+0

+1はい、ネオ、あなたはgrepのの*出力*をテストする必要はありませんがgrepの*終了コード*をテストして、何かが見つかったかどうかを確認する必要があります。 –

0

引数を-zに引用する必要があります。もちろん

if [ -z "$(grep ">Success<" $OUTFILE)" ] 

>Success<が見つかっあるかどうかをテストするために、より簡単な方法があります:

if grep -q ">Success<" $OUTFILE 
関連する問題