2016-06-20 12 views
-1

のために任意のエラーのためにのみ1を返し、0 I以下に示すように、私はエラーと非エラーのための2つの条件を与えているUNIXシェルスクリプト、持っている:UnixのKSH:成功

スクリプトを:Test.sh

#!/bin/sh 

error1=ERROR 
error2=FAIL 

CheckError1=`grep $error1 proshell.sh | wc -l` 

CheckErro2=`grep $error2 proshell.sh | wc -l` 

if [ $CheckError1 -ge 1 ] then 
    exit 1 

elif [ $CheckError2 -ge 1 ] then 
    exit 1 

else 
    exit 0 
fi 

:問題は、私はどのように1つだけエラーがないかどうかを取得するために、出口1

のためにエラーがないか常に1になっておりませんということでしょうか?

+1

見つかった場合、成功の終了状態で終了し、実際のコードを表示してください。あなたが示したものは構文的に正しいものではありません。 'CheckErro2 =' vs '$ CheckError2 -ge'もタイプミスです。あなたは1の代わりに何を得ていますか?あなたは0を得ていますか?あるいは、 '['は不正な状態について不平を言っていますか?しかし、コードは実行されないので、推測は無駄です。 Bashを参照する[シェルスクリプトをデバッグする方法](https://stackoverflow.com/questions/951336/)も参照してください。ただし、Kornシェル(およびBourneシェル)でも同様です。 –

+0

また、 'ksh'について話していますが、あなたのシバン行は'/bin/sh'を指定しています。これはおそらく_not_ 'ksh'です。 – mklement0

+0

両方のテストを 'grep -E" $ {error1} | $ {error2} "' –

答えて

1

と一致する行の番号がで、の終了ステータスがgrepではないことを確認しています。

あなたはこれをしたい:

error1=ERROR 
error2=FAIL 
file-proshell.sh 

if grep -q "$error1" "$file" || grep -q "$error2" "$file"; then 
    exit 1 
else 
    exit 0 
fi 

grep -qは出力を抑制したが、試合は