Linux и UNIX: программирование в shell. Руководство разработчика
Linux и UNIX: программирование в shell. Руководство разработчика читать книгу онлайн
Данная книга является практическим руководством по программированию интерпретатора Bourne shell -cтандартного командного интерпретатора в UNIX, полностью совместимого с интерпретатором BASH shell в Linux. Книга предназначена для начинающих и опытных программистов и содержит множество полезных примеров, советов и подсказок. С ее помощью читатель сможет быстро научиться создавать shell–сценарии для реальных задач и ситуаций, возникающих в большинстве систем UNIX и Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
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 "[email protected]" 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–сценариях можно применять большинство команд, поддерживаемых терминалом.
Команда tput не распознает настройки цвета. Для работы с цветом используются управляющие символы.
21.1. Применение команды tput
Чтобы применить команду tput, следует инициализировать установки терминала, обращаясь к команде tput с помощью сценариев или командной строки.
$ tput init
Команда tput генерирует три различных потока вывода: строки, числовые и булевы значения (истина/ложь). Далее будут рассмотрены некоторые наиболее часто используемые свойства каждого потока вывода.
21.1.1. Строчный поток вывода данных
Ниже приводятся общие строки из потока вывода:
Название
Значение
bel
Звуковой сигнал
blink
Режим мерцания
bold
Двойная интенсивность
civis
Скрыть курсор
clear
Очистка экрана
сnorm
Отобразить курсор
cup
Перемещение курсора на экране в позицию x, у
el
Очистка до конца строки
ell
Очистка к началу строки
smso
Переход в режим отступа
rmso
Выход из режима отступа
smul
Переход в режим подчеркивания
rmul
Выход из режима подчеркивания
sc
Сохранение текущего положения курсора
rc
Восстановление последней позиции курсора
sgr0
Обычный экран
rev
Обратное видео
21.1.2. Числовой вывод
Наиболее распространенный числовой вывод:
Название
Значение
cols
Количество столбцов
it
Настройка табуляции
lines
Количество строк на экране
21.1.3. Поток вывода булевых данных
Команда tput включает незначительное количество булевых операторов.
Название
Значение
chts
Курсор трудно заметить
hs
Имеет строку статуса
21.2. Работа с командой tput
Рассмотрим наиболее распространенные разновидности команды tput, а также методы ее использования в сценариях.
21.2.1. Присвоение имен командам tput