Выбрать главу

Лучше применять эту команду в форме функции, тогда можно указывать значения для строки и столбца.

xу()

(

#_R= row, _C=column

_R=$1

_C=$2

tput cup $_R $_C

}

clear

xy 1 5

echo -n "Enter your name :"

read NAME

xy 2 5

echo -n "Enter your age :"

read AGE

Конечно, желательно передавать строку для отображения; ниже приводится небольшая модификация этого сценария.

ху()

{

#_R= row, _C=column

_R-$1

_TEXT=$3

tput cup $_R $_C

echo -n $_TEXT

}

Сценарий можно вызвать следующим образом:

xy 5 10 "Enter your password :" read CODE

21.2.6. Центрирование отображаемого текста

При центрировании текста на экране нужно быть предельно внимательным. С помощью команды tput необходимо получить столбцы, затем получить значение для длины строки, исключить это значение из столбцов tput и разделить ответ на две части. В дальнейшем нужно только указать номер строки, где отобразится данная строка.

Ниже приводится часть кода, который выполняет эту задачу. Чтобы просмотреть строки файла и центрировать на экране весь текст, достаточно выполнить небольшое изменение.

Введите символы, нажмите клавишу [Return], и текст отобразится в середине экрана начиная со строки 10.

echo -n "input string :"

read STR

# быстрый способ вычисления длины строки

LEN=`echo $STR | wc -с`

COLS=`tput cols`

NEW_COL=`expr \($COLS - $LEN \) / 2`

xy 10 $NEW_COL

echo $STR

Чтобы указанная функция отличалась большей гибкостью, при ее вызове можно

использовать текст и номер строки. Функция будет иметь следующий вид:

centertxt() {

_ROW=$1 _STR=$2

# быстрый способ получения длины строки

LEN=`echo $_STR | wc -c`

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