Фактически весь сценарий состоит из цикла while, который выполняет обход аргументов командной строки, идентифицирует длинные флаги и добавляет в переменную flags соответствующие им однобуквенные флаги. После завершения цикла сценарий просто вызывает оригинальную программу quota
Запуск сценария
Существует два способа интеграции подобных оберток в систему. Самый простой: переименовать файл сценария, дав ему имя quota, скопировать его в локальный каталог (например,
Результаты
В листинге 4.8 приводятся результаты вызовов сценария newquota с флагами −verbose и −quiet.
Листинг 4.8. Тестирование сценария newquota
$ newquota −verbose
Disk quotas for user dtint (uid 24810):
···· Filesystem·· usage·· quota·· limit·· grace·· files·· quota·· limit·· grace
·········· /usr··338262··614400··675840·········· 10703··120000·· 126000
$ newquota −quiet
В режиме −quiet информация выводится, только если пользователь превысил выделенные ему квоты. Как показывают результаты, все работает правильно. И кстати, мы не превысили квоты. Уф-ф!
№ 31. Делаем sftp более похожей на ftp
В составе пакета ssh (Secure Shell) имеется безопасная версия программы ftp (для работы с протоколом File Transfer Protocol), но ее интерфейс может показаться неудобным для тех, кто привык пользоваться старым, замшелым клиентом ftp. Основная проблема в том, что ftp вызывается как ftp remotehost и затем предлагает ввести имя учетной записи и пароль. Программа sftp, напротив, требует передать учетные данные и имя удаленного хоста в командной строке и не работает как должно (или как ожидается), если ей передать только имя хоста.
Простой сценарий-обертка myftp, который приводится в листинге 4.9, дает пользователям возможность вызвать его в точности, как они привыкли вызывать программу ftp, и предлагает ввести необходимые данные.
Код
Листинг 4.9. Сценарий mysftp, более дружественная версия sftp
··#!/bin/bash
··# mysftp-Makes sftp start up more like ftp
··/bin/echo −n "User account: "
··read account
··if [-z $account]; then
····exit 0; # Видимо, пользователь передумал
··fi
··if [-z "$1"]; then
····/bin/echo −n "Remote host: "
····read host
····if [-z $host]; then
······exit 0
····fi
··else
····host=$1
··fi
··# Конец сценария и переключение на sftp.
··#·· Флаг −C разрешает использовать сжатие.
Как это работает
В этом сценарии показан один трюк, достойный отдельного упоминания. Здесь используются фактически те же приемы, что уже демонстрировались в предыдущих сценариях, кроме последней строки, где демонстрируется прием, не освещавшийся прежде: вызов команды exec
Запуск сценария
Как и в случае с клиентом ftp, если пользователь не укажет имя удаленного хоста в командной строке, сценарий предложит ввести его. Если сценарий вызван командой mysftp remotehost, в качестве имени хоста будет использоваться remotehost.
Результаты
Давайте посмотрим, что случится, если вызвать этот сценарий и программу sftp без аргументов командной строки. В листинге 4.10 показана попытка запустить программу sftp.