即使在文件传输过程中发生错误,大多数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千字节/秒)”?
答案 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)
使用wget
或curl
。它们都支持ftp,以及http和https,并将返回所需的退出状态。它们也都是开源的。