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 "\033[40;32m"
System V: echo "\033[40;32m"
Обобщенный метод: echo "<CTRL‑V><ESCAPE>[40;32m"
При использовании обобщенного метода, т. е. комбинации клавиш [Ctrl+V], нажмите клавишу [Esc], затем введите символы [40;32m. Обобщенный метод и применяется далее в книге.
Возможно, лучше поместить конструкции echo, отвечающие за воспроизведение цвета, в конструкцию case, а затем оформить все это в виде функции. Ниже, приводится функция цвета case.
colour ()
(
# формат цвет_фона; цвет_переднего_планаm
case $1 in
black_green)
echo '^[[40;32m';;
black_yellow)
echo '^[[40;33m';;
black_white)
echo '^[[40;37m';;
black_cyan)
echo '^[[40;36m';;
red_yellow)
echo '^[[41;33m';;
black_blue)
echo '^[[40;34m';;
esac
}
Чтобы задать красный цвет фона и желтый цвет переднего плана, примените команду:
colour red_yellow
Для использования цветов в сценариях выполните следующие действия:
colour whatever echo something
# измените на другой цвет
colour whatever
echo something
Обычно по умолчанию в качестве цветов экрана используются черный и белый. Рассмотрим, как изменить эту установку, чтобы фоновым цветом был черный, а цветом переднего плана — зеленый. С этой целью в файл .profile достаточно добавить конструкцию echo, которая создает требуемую комбинацию.
Ниже приводится пример кода для управления экраном.
$ pg colour_scr
#!/bin/sh
# colour_scr
tput init
MYDATE=`date +%D`
colour ()
{
# формат цвет_фона; цвет_лереднего_планаm
case $1 in
black_green)
echo '^[[40;32m' ;;
black_yellow)
echo '^[[40;33m' ;;