質問: linux shell ftp 転送 エラー制御 linuxのshellで、ftpを使ってデータを転送するシェルを作成しています。 転送部分はうまくいき、エラー制御を考えているのですが上手くいきません。(ログは取得できてます) やりたいことは、ftp転送で失敗したかどうかの判定をしたい。ということです。 過去ログ等見ていて、ログファイルからエラーnoをgrepして判断する。というやり方があったので 試して見ましたが、構文が正常に書けていないようです。すみませんがアドバイスをお願い致します。 ftp転送終了したとします。 ログは $log_path/$date.txt にとってあります。 grep ^425 $log_path/$date.txt /dev/null if $? eq 0 then error_flag=1 exit 1 fi (エラーが発生したら、error_flagに1が入るようにしたい) エラーナンバーは425(データコネクションをオープンできない)というやつで、いいかなと思っていますが、もっと適切なものがあれば教えて下さい。(putで行っている転送の失敗を判断できればいいです) 上記の構文ではエラーが出ます。 また、 /dev/null の部分が意味が解っていません。この部分の説明をお願いできますでしょうか? 宜しくお願い致します。
回答: 正しくは grep ^425 $log_path/$date.txt > /dev/null if [ $? -eq 0 ]; then #error_flag=1 exit 1 fi だと思います。 grepは正規表現に該当した行を出力するので、それを「 > /dev/null」で表示させないようにします。 ifの比較の文も変更しています。スペースに注意して下さい。 error_flag=1とexit 1ですがどちらか一つにして下さい。 シェルの実行方法は a) ./aaa.sh b) source ./aaa.sh の二通りありますが、aではサブシェル内で実行され、bでは現在のシェル内で実行されます。 aではerror_flag=1が現在のシェルに引き継がれないので、意味を持ちません。 bではexit 1で現在のシェルを終了させてしまいます(要するにコマンドプロンプトが閉じる)。