处理FTP错误代码

时间:2009-06-03 13:21:08

标签: shell unix grep

即使在文件传输过程中发生错误,大多数FTP客户端都会返回退出代码“0”。

我正面临一个问题,我正在检查错误代码。但我的脚本在发送的字节中获取错误代码编号,验证失败。

我试过这样:

if [[ egrep '^202 |^421 |^426 |^450 |^500 |^501 |^503 |^530 |^550 |^553 |^666 |^777 |^999 ' test.log ]] echo " Error in FTP !!! " else echo " FTP Successful !!!" fi

任何人都可以帮我解决如何将错误代码与“字节发送”消息附带的其他数字隔离,例如“在0.001秒内发送220字节(220千字节/秒)”?

4 个答案:

答案 0 :(得分:1)

当返回错误代码时,该消息是否仅包含错误代码而后面没有文本?如果是这样,使用行结束锚$将起作用:

if [[ egrep '^202$ |^421$ |^426$ |^450$ |^500$ |^501$ |^503$ |^530$ |^550$ |^553$ |^666$ |^777$ |^999$ ' test.log ]] echo " Error in FTP !!! " else echo " FTP Successful !!!" fi

答案 1 :(得分:1)

使用正则表达式的Perl变体,您可以使用以下内容:

if [[ grep -P '^(([45][0-9][0-9] )(?-i)(?!bytes received))|\?|(\w+: )|([Nn]ot connected)' test.log ]] echo " Error in FTP !!! " else echo " FTP Successful !!!" fi

正则表达式测试各种常见的FTP错误代码和客户端的一些。它使用一个前瞻表达式'(?!...)来测试不存在的文字“收到的字节”,它解决了你的要求 - 以及我的。 ; - )

表达远非完美,可以根据您的需要进行扩展。

答案 2 :(得分:0)

我想你必须在你的模式中更具体一点,即在错误代码之后将消息的开头带入模式。

答案 3 :(得分:0)

使用wgetcurl。它们都支持ftp,以及http和https,并将返回所需的退出状态。它们也都是开源的。