Linux и UNIX: программирование в shell. Руководство разработчика
вернуться

Тейнсли Дэвид

Шрифт:

25.4. Автоматизация передачи файлов по протоколу ftp

Автоматизация передачи файлов по протоколу ftp является одним из широко распространенных методов применения конструкции "документ здесь". При использовании протокола ftp желательно предоставить пользователю несложный интерфейс для удобства работы. В следующем сценарии для создания подключения ftp применяется анонимное имя пользователя. Это специальное имя позволяет системе создавать защищенные учетные записи ftp, содержащие общедоступные каталоги (public). В общем случае каждый пользователь при установке подключения с использованием анонимного имени сможет только загружать файлы из данного общедоступного каталога. Но можно будет также выполнять выгрузку файлов.

Пароль можно выбрать произвольным образом, однако удобно воспользоваться названием хоста и локальным идентификатором пользователя или электронным, адресом.

Приведенный ниже сценарий запрашивает следующую информацию:

1. Адрес удаленного компьютера, с которым требуетця установить связь.

2. Тип передаваемых файлов: двоичный или ASCII.

3. Имя получаемого файла.

4. Локальный каталог, в котором размещается выбранный файл.

Когда пользователь вводит наименование удаленного компьютера, с которым устанавливается соединение, для удаленного хоста выполняется команда ttaceroute. Таким образом, можно быть уверенным в том, что соединение действительно установлено. Если же результат выполнения команды traceroute был неудачным, сценарий отображает повторный запрос.

При нажатии клавиши [Return] по умолчанию принимается двоичный режим передачи файлов. После ввода имени загружаемого файла пользователя запрашивают о каталоге назначения для загружаемого файла. По умолчанию этим каталогом служит каталог /tmp. Если пользователь указывает другой каталог, который не может быть найден, используется каталог /tmp.

Именем загружаемого файла будет имя файла с присоединенным к нему расширением .ftp. И, наконец, после того как все эти варианты отображаются и подтверждаются, начинается процесс передачи файлов.

Ниже показано, как выглядят результаты выполнения сценария.

$ ftpauto

Enter the host you wish to access: uniware

Wait… seeing If uniware ls out there..

bumper can see unaware

What type of transfer / receive mode ?

1. : Binary

2. : ASCII

Your choice [1…2] [1] :

Enter the name of the file to retrieve :gnutar. Z Enter the directory where the file ls to be placed[/tmp] :

Host to connect ls: uniware

File to get ls : gnutar.Z

Mode to use ls : binary

File to be put in : /tmp/gnutar.Z.ftp

Ready to get file 'y' or 'q' to quit? [y..q] :

Далее приводится соответствующий сценарий.

$ pg ftpauto

#!/bin/sh

#сценарий ftp

#ftpauto

USER=`whoami`

MYDATE=`date +%d/%m/%Y`

THIS_HOST=`hostname -s`

tracelog=/tmp/tracelog.$$

while :

do

# бесконечный цикл

tput clear

cat << MAYDAY

User: $USER $MYDATE

This host: $THIS_HOST

FTP RETRIEVAL SCRIPT

Using the ID of anonymous

MAYDAY

echo -n "Enter the host you wish to access :"

read DEST_HOST

# введено ли имя хоста ???

if [ "$DEST_HOST"="" ]

then

echo "No destination host entered" >&2

exit 1

fi

# можно ли увидеть хост ???

echo "wait..seeing if $DEST_HOST is out there.."

# traceroute проверяет соединение

traceroute $DEST_HOST > $tracelog 2>&1

if grep "unknown host" $tracelog >/dev/null 2>&1; then

echo "Could not locate $DEST_HOST"

echo -n "Try another host? [y..n] :"

read ANS

case $ANS in

y|Y) ;;

*) break;; # выход из бесконечного цикла

esac else

echo "$THIS_HOST can see $DEST_HOST"

break # выход из бесконечного цикла

fi

done

# по умолчанию двоичный режим

echo "What type of transfer /receive mode ?"

echo " 1 : Binary"

echo " 2 : ASCII"

echo -n -e "\fYour choice [1..2] [1]:"

read $TYPE

case $TYPE in

1) MODE=binary;;

2) MODE=ascii;;

*) MODE=binary;;

esac

echo -n " Enter the name of the file to retrieve :"

read FILENAME

if [ "$FILENAME" — "" ]; then

echo "No filename entered" >&2

exit 1

fi

# по умолчанию, это tmp

echo -n -e "\f Enter the directory where the file ls to be placed[/tmp] :"

read DIREC

cd $DIREC >/dev/null 2>&1

  • Читать дальше
  • 1
  • ...
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win