Как улучшить эту функцию FTP (оболочки)? - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть около тонны скриптов, использующих следующую функцию:

# Copies files over using FTP.
# Configurations set at the beggining of the script
# @param    $1 = FTP Host
#           $2 = FTP User
#           $3 = FTP User password
#           $4 = Source file name
#           $5 = destination directory
#           $6 = local directory
doftp() {
    log_message_file "INFO" "Starting FTP"

    ftp_hst=$1
    ftp_usr=$2
    ftp_pwd=$3
    sourcefile=$4
    destdir=$5
    locdir=$6

    ftp -nv $FTPH << EOF 2> ftp.err.$$
quote USER $ftp_usr
quote PASS $ftp_pwd
cd $destdir
lcd $locdir
bin

put $sourcefile

bye
EOF

    if [ "$(wc ftp.err.$$|cut -d" " -f8)" != 0 ] ; then
        log_message_file "ERROR" "Problem uploading files: $(cat  ftp.err.$$)"
    else
        log_message_file "INFO" "FTP finished"
    fi
    rm ftp.err.$$
}

Работает, работает, если не работает ftp.К счастью для меня, сценарии довольно точны, и FTP почти никогда не выходит из строя.Но это один из тех редких моментов, когда у вас есть возможность (время) вернуться назад и просмотреть код, отмеченный в списке TODO.Единственная проблема заключается в том, что я не слишком уверен, как ее улучшить ... Я бы взял вам рекомендации, что там изменить.

Одной из очевидных проблем является ошибка парсинга с ftp, котораясовершенно хромойНо я также подумаю над другими частями функции:)

Стоит ли упоминать, что это выполняется на сервере AIX?О, и нет, я не могу использовать SFTP: (

Спасибо за любой ввод!

пс .: log_message_file - это просто базовое ведение журнала ... не влияет на функцию.

1 Ответ

2 голосов
/ 05 апреля 2011
  • хорошая документация
  • хорошие имена переменных
  • хорошие отступы, возможно, вы захотите прочитать о << - EOF («-» - это элемент, который я намерен выделить этим комментарием. Использование этой функции позволяет сделать отступ (необходимо использовать символы табуляции) всего документа здесь соответствовать отступу остальной части скрипта. </li>
  • хорошее использование имени файла tmp с $$ (в зависимости от того, как часто используется эта функция, вы можете добавить имя родительского скрипта как часть имени tmp для дальнейшей неоднозначности, но с низким приоритетом)
  • хорошее использование $ (cat ftp.err. $$), т.е. фактически показывает сообщение об ошибке, а не просто сообщение типа «произошла ошибка» (я вижу это все время, какая ошибка? тзд?!)

  • вы можете расширить службу ftp для использования mput, но тогда вам нужно понять причуды вашего конкретного клиента ftp и сделать себе заметку, что в любое время, когда вам понадобится смена клиента ftp, вам понадобится чтобы проверить, работает ли ваша переменная mput $ {fileNames} так, как вы ожидаете.

  • возможно, единственное место, где можно подумать об улучшении, - это использовать инструкцию case для анализа вывода STDERR, но опять же, дополнительное преимущество может не стоить затрат на обслуживание в будущем.

errMsgs="$(cat ftp.err.$$)"

case "${errMsgs}" in
    *warningStrings* ) print "warning found, msg was ${errMsg} ;;
    *errorStrings* ) print "error found, msg was ${errMsg} ;;
    *fatalStrings* ) pring "fatal error found, can't continue, msg was ${errMsg} ;;
esac

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...