2017-11-07 6 views
0

ftp接続が失敗した場合、またはegrepを使用して成功した場合に返すbashスクリプトを実行しています。問題は、egrepで単語を取得しようとしたときに0が返されますが、 2.egrepはbashスクリプトで0を返していますが、正しい値を戻すコマンドを手動で実行しています。 UNIXのbash

を返すことは、これは私のコードです:

#Create the FTP Connection. 
for ip_address in ${IP_ADDRESS[@]}; do 
    ftp ${ip_address} <<ftp_commands > ${FTP_RESULTS} 
    user "${USER_ID}" "${USER_PASSWORD}" 
    pwd 
    bye 
ftp_commands 

ftp_result_id=`egrep -c "Login failed|Connection refused|Not connected|Connection timed out" ${FTP_RESULTS}` 

if [ ${ftp_result_id} -gt 0 ]; then 
    echo "$(date +%m/%d/%y_%H:%M:%S) - ${ip_address} - Not connected" >> ${CONNECTION_RESULTS_FILE} 
else 
    echo "$(date +%m/%d/%y_%H:%M:%S) - ${ip_address} - Connected" >> ${CONNECTION_RESULTS_FILE} 
fi 

done 

ftp_results_idはegrepの-cコマンドで0を返しているが、私はそれが走った後に手動で実行すると、ファイルを作成しますよ「FTP_RESULTSを」と取り組んでいます「接続されていません」という2つの一致が見つかったとします。

提案はありますか?

+0

「grep -Eq'を使用して終了コード – anubhava

+0

@anubhava grep -Eqが何も返さない... –

+0

すべてのコマンドと同様に、有用な終了コードを返します。 'if grep -Eq"あなたの言葉 "yourfile;エコー "それは一致した" fi' –

答えて

1

egrep -cコマンドは一致をカウントします。 次に、0を超える一致がある場合に条件を使用して何かを行います。

より単純で優れた解決策は、終了コードegrepを使用することです。 egrepは一致が見つかった場合は0(=成功)で終了し、それ以外の場合は でゼロ以外の値で終了します。

if egrep -q "Login failed|Connection refused|Not connected|Connection timed out" "${FTP_RESULTS}"; then 

これはあなたの投稿コード内のロジックと同等です: あなたはこのようif文を書くことができます。 ftp_result_id変数は必要ありません。 egrepの出力を保存する必要はありません。 egrepが出力を生成しないように、-qフラグを追加しました。 必要はありません。

関連する問題