Linux и UNIX: программирование в shell. Руководство разработчика
Шрифт:
you chose the following options..
I can now process these Quite=у /dev/rmt0 /tmp/backup.log
После того как команда getopts завершит выполнение проверки, значения, присвоенные OPTARG, могут быть использованы а процессе обычной обработки. Конечно, если в сценарии имеются опции, они должны быть установлены для дальнейшей обработки и проверки значений.
Вот и все, что требуется знать о том, каким образом команда getopts обеспечивает передачу параметров командной строки.
Для фактической обработки файлов используется цикл for, подобно тому, как это было в сценарии tr case, где применялась команда shift для работы с опциями.
Применение команды getopts позволяет радикально сократить объем создаваемого кода по сравнению с использованием метода shift-
20.2.5. Использование команды getopts для преобразования файлов
А теперь воспользуемся сценарием tr_case, который преобразуем с помощью только что изученной команды getopts. Существует единственное отличие между методами getopts и shift, применяемыми для обработки опций командной строки. Это отличие заключается в том, что в первом случае используется опция verbose.
Переменная verbose имеет значение "по", заданное по умолчанию; но при перехвате значения опции командной строки с помощью конструкции case переменной verbose присваивается значение "yes". Отображение команд на экране осуществляется с помощью простой конструкции if.
if [ "VERBOSE"="on" ]; then
echo "doing upper on $LOOP..newflie called $LOOP$EXT"
fi
Если применяется оболочка для системных команд, которые всегда отображают результаты своих действий, то вывод, включающий произвольные ошибки, просто перенаправляется в /dev/null.
command > /dev/null 2>&1
По умолчанию переменная verbose не установлена (нет отображения). Активизировать эту переменную можно посредством опции -v. Например, для преобразования серии файлов myfiles в символы нижнего регистра с помощью VERBOSE применяется следующий формат:
tr_case -1 -v myfilel myfile2…
либо
tr_case -v -1 myfilel myfile2…
Сразу же бросается в глаза заметное сокращение объема программного кода при использовании команды getopts. Код, применяемый для обработки файлов, аналогичен коду с командой shift.
Пример сценария:
$ pg tr_case2
#!/bin/sh
#tr_case2
# преобразование регистра, используется команда getopts
ЕХТ=""
TRCASE=""
FLAG=""
OPT="no"
VERBOSE="off"
while getopts :luv OPTION
do
case $OPTION in
l)
TRCASE="lower"
EXT=".LC"
OPT=yes
;;
u)
TRCASE="upper"
EXT=".UC"
OPT=yes
;;
v)
VERBOSE=on
;;
\?) echo "usage: `basename $0`: -[l|u] —v file[s]"
exit 1
;;
esac
done
#следующий аргумент, пожалуйста
shift `expr $OPTIND -1`
#есть аргументы ???
if [ "$#"="0" ] || [ "$OPT"="no" ] then
echo "usage: `basename $0`: -[l|u] — v file[s]" >&2
exit 1
fi
for LOOP in "$@" do
if [ ! — f $LOOP ] then
echo "`basename $0`: Error cannot find file $LOOP" >&2
exit 1
fi
echo $TRCASE $LOOP
case $TRCASE in
lower)
if [ "VERBOSE"="on" ]; then
echo "doing…lower on $LOOP..newflie called $LOOP$EXT"
fi
cat $LOOP | tr "[a-z]" "[A-Z]" >$LOOP$EXT
;;
upper) if [ "VERBOSE"="on" ]; then
echo "doing upper on $LOOP..newflie called $LOOP$EXT"
fi
cat $LOOP | tr "[A-Z]" "[a-z]" >$LOOP$EXT
;;
esac
done
При указании опций командной строки в сценариях было бы неплохо придерживаться соглашений о наименовании, принятых в UNIX либо Linux. В следующей таблице описываются некоторые общие опции и их значения.
Опция
Значение
– a
добавление
– c
счетчик, копирование
– d
каталог, устройство
– e
выполнение
– f
имя файла, форсировать
– h
справка
– i
игнорировать регистр
– 1
журнальный файл
– o
полный вывод
– q
полностью
– p
путь
– v
многословный
20.3. Заключение
Способность корректно обрабатывать опции командной строки придает сценариям профессиональный вид. Для пользователя эти опции выглядят точно так же, как любые другие системные команды. В этой главе были рассмотрены два метода, предназначенные для обработки опций командной строки, — shift и getopts. Размер программного кода, необходимого для внедрения метода getopts, является намного меньшим, чем в случае использования метода shift.
Метод shift также позволяет преодолеть ограничения параметров $1…$9, проявляющиеся при их передаче сценариям. При использовании метода shift сценарий просто выполняет "смещение" среди всех вызываемых аргументов, благодаря чему можно выполнять дальнейшую обработку.
ГЛАВА 21
Создание экранного вывода
С помощью shell–сценариев можно создавать профессионального вида экраны, позволяющие реализовать интерактивное взаимодействие пользователя с системой. Для этого достаточно располагать цветным монитором и использовать команду tput.
В главе рассматриваются следующие темы:
• применение команды tput;
• использование escape–последовательностей и генерирование управляющих кодов;
• pабота с цветом.
Известно, что существует три различных варианта команды tput. Наилучшим из них является команда tput GNU. Если в системе отсутствует эта версия команды, загрузите и установите ее. Команда tput использует файл /etc/terminfo или файл /etc/termcap. В shell–сценариях можно применять большинство команд, поддерживаемых терминалом.