Linux и UNIX: программирование в shell. Руководство разработчика
Linux и UNIX: программирование в shell. Руководство разработчика читать книгу онлайн
Данная книга является практическим руководством по программированию интерпретатора Bourne shell -cтандартного командного интерпретатора в UNIX, полностью совместимого с интерпретатором BASH shell в Linux. Книга предназначена для начинающих и опытных программистов и содержит множество полезных примеров, советов и подсказок. С ее помощью читатель сможет быстро научиться создавать shell–сценарии для реальных задач и ситуаций, возникающих в большинстве систем UNIX и Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
COLS=`tput cols`
_NEW_COL=`expr {$COLS - $LEN ) / 2`
xy $_ROW $_NEW_COL
echo $_STR
}
Чтобы вызвать функцию, следует применить команду:
centertxt 15 "THE MAIN EVENT"
или аналогичную команду, но с использованием строки в качестве аргумента:
centertxt 15 $1
21.2.7. Определение атрибутов терминала
Рассмотрим сценарий, в котором с помощью команды tput производится обращение к базе данных terminfo. С помощью некоторых команд tput отображаются управляющие коды терминала.
$ pg termput
#!/bin/sh
#termput
#инициируйте tput для терминала
tput init
clear
echo "tput <> terminfo"
infocmp -l $TERM | while read LINE
do
case $LINE in
bel*) echo "$LINE: sound the bell" ;;
blink*) echo "$LINE: begin blinking mode";;
bold*) echo "$LINE: make it bold" ;;
el*) echo "$LINE: clear to end of line" ;;
civis*) echo "$LINE: turn cursor off";;
cnorm*) echo "$LINE: turn cursor on ";;
clear*) echo "$LINE: clear the screen" ;;
kcuul*) echo "$LINE: up arrow ";;
kcubl*) echo "$LINE: left arrow ";;
kcufl*) echo "$LINE: right arrow ";;
kcudl*) echo "$LINE: down arrow ";;
esac done
Команда infocmp извлекает из файла базы данных terminfo информацию о терминале. Если нужно просмотреть файл, содержащий сведения о настройках терминала, выполните команду:
$ infocmp $TERM
Ниже с помощью сценария termput отображается поток вывода для некоторого терминала:
$ termput
tput <> terminfo
bel=^G,: sound the bell
blink=E[5m, : begin blinking mode
bold=E[1m,: make it bold
civis=E[?251,: turn cursor off
clear=E[HE[J,: clear the screen cnorm
‑E[?25h,; turn cursor on
el=E[K,: clear to end of line
ell=E[lK,: clear to end of line
kcubl=E[D,: left arrow
kcudl=E[B,: down arrow
kcufl=E[C,: right arrow
kcuul=E[A,: up arrow
21.2.8. Применение функциональных клавиш при работе со сценариями
С помощью команды cat можно обращаться к специальным клавишам ([F1], [стрелка_вверх] и т. д.). Введите команду cat -v, затем нажмите любую управляющую клавишу и просмотрите, что отобразится в нижней строке. Когда просмотр завершится, нажмите комбинацию клавиш [Ctrl+C].
В следующем примере вызывается команда cat и используются клавиши [F1] (^[OP), [F2](^[OQ) и [стрелка_вверх](^[[A).
$ cat -v
^[ОР
^[OQ
^[[А
<CTRL‑C>
Эта информация позволяет применять рассмотренные символы в сценариях в качестве дополнительных методов, обеспечивающих интерактивный режим работу пользователя.
В приведенном ниже сценарии распознаются клавиши [F1], [F2], а также клавиши стрелок. Пользовательские значения могут быть иными, поэтому выполните команду cat, чтобы уточнить, какие значения соответствуют управляющим клавишам терминала.
$ pg control_keys
#!/bin/sh
#управляющие_клавиши
#для вставки примените последовательность '<CTRL‑V><ESCAPE>sequence'
uparrowkey='^[[А'
downarrowkey='^[[В'
leftarrowkey='^[[D'
rightarrowkey='^[[С'
f1key='^[OP'
f2key='^[OQ'
echo -n " Press a control key then hit return"
read KEY
case $KEY in
$uparrowkey) echo "UP arrow";;
$downarrowkey) echo "DOWN arrow";;
$leftarrowkey) echo "LEFT arrow";;
$rightarrowkey) echo "RIGHT arrow";;
$f1key) echo "F1 key";;
$f2key) echo "F2 key";;
*) echo "unknown key $key";;
esac
21.2.9. Применение различных цветов
Благодаря применению цвета можно придать экрану, где. отображается поток ввода, более привлекательный вид. При работе с цветами используется стандарт ANSI. Однако не все цвета можно применить во всех системах. Предлагаем перечень наиболее часто употребляемых цветов.
Цвета переднего плана
Значение
Цвет
30
черный
31
красный
32
зеленый
33
желтый (или коричневый)
34
голубой
35
пурпурный
36
синий (циан)
37
белый (или серый)
Фоновые цвета
Значение
Цвет
40
черный
41
красный
42
зеленый
43
желтый (или коричневый)
44
голубой
45
пурпурный
46
синий (циан)
47
белый (или серый)
Для отображения цветов переднего плана и фоновых цветов применяется следующий формат:
<ESCAPE> [значение_фона; значение переднего плана m
21.2.10. Генерирование цветов
Для генерирования цвета управляющие символы встраиваются в конструкцию echo. Данный метод применяется при работе с цветным терминалом и произвольной системой. Как и в случае с управляющими символами, цвета можно генерировать с помощью escape–последовательностей, встраиваемых в конструкцию echo. Для создания черного фона с передним планом зеленого цвета воспользуйтесь командой:
Linux/BSD: echo -e "