2009-06-03 3 views
0

Большинство FTP-клиентов возвращают код выхода «0», даже если во время передачи файла произошла ошибка.Обработка кодов ошибок FTP

У меня возникла проблема, где я проверяю коды ошибок. Но мой скрипт получает номер кода ошибки в отправленных байтах, и проверка не выполняется.

Я пробовал так:

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 

Может ли один помочь мне, как отделить код ошибки из других номеров, которые приходят вместе с сообщением «байт, посылаемый» например «220 байт, отправленных в 0.001 секунд (220 Kbytes/sec) "?

ответ

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 
0

Использование wget или curl. Оба они поддерживают ftp, а также http и https и возвращают желаемый статус выхода. И они оба с открытым исходным кодом.

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 и некоторые на стороне клиента. Он использует выражение «вперед» (?! ...) », чтобы проверить отсутствие несущественных« полученных байтов », которое решает ваше требование, и мое. ;-)

Выражение далека от совершенства и может быть расширено в соответствии с вашими потребностями.

Смежные вопросы