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 сценарий просто выполняет "смещение" среди всех вызываемых аргументов, благодаря чему можно выполнять дальнейшую обработку.
Создание экранного вывода
С помощью shell–сценариев можно создавать профессионального вида экраны, позволяющие реализовать интерактивное взаимодействие пользователя с системой. Для этого достаточно располагать цветным монитором и использовать команду tput.
В главе рассматриваются следующие темы:
• применение команды tput;
• использование escape–последовательностей и генерирование управляющих кодов;
• pабота с цветом.
Известно, что существует три различных варианта команды tput. Наилучшим из них является команда tput GNU. Если в системе отсутствует эта версия команды, загрузите и установите ее. Команда tput использует файл /etc/terminfo или файл /etc/termcap. В shell–сценариях можно применять большинство команд, поддерживаемых терминалом.
Команда tput не распознает настройки цвета. Для работы с цветом используются управляющие символы.
21.1. Применение команды tput
Чтобы применить команду tput, следует инициализировать установки терминала, обращаясь к команде tput с помощью сценариев или командной строки.
$ tput init
Команда tput генерирует три различных потока вывода: строки, числовые и булевы значения (истина/ложь). Далее будут рассмотрены некоторые наиболее часто используемые свойства каждого потока вывода.
Ниже приводятся общие строки из потока вывода: