Автоматизация передачи файлов по протоколу 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