Книга: Искусство программирования на языке сценариев командной оболочки

Пример 11-5. Обнаружение нажатия на курсорные клавиши

Пример 11-5. Обнаружение нажатия на курсорные клавиши

#!/bin/bash

# arrow-detect.sh: Обнаружение нажатия на курсорные клавиши, и не только...

# Спасибо Sandro Magi за то что показал мне -- как.

# --------------------------------------------

# Коды клавиш.

arrowup='[A'

arrowdown='[B'

arrowrt='[C'

arrowleft='[D'

insert='[2'

delete='[3'

# --------------------------------------------

SUCCESS=0

OTHER=65

echo -n "Нажмите на клавишу... "

# Может потребоваться нажать на ENTER, если была нажата клавиша

# не входящая в список выше.

read -n3 key # Прочитать 3 символа.

echo -n "$key" | grep "$arrowup" #Определение нажатой клавиши.

if [ "$?" -eq $SUCCESS ]

then

echo "Нажата клавиша "."

exit $SUCCESS

fi

echo -n "$key" | grep "$arrowdown"

if [ "$?" -eq $SUCCESS ]

then

echo "Нажата клавиша "

exit $SUCCESS

fi

echo -n "$key" | grep "$arrowrt"

if [ "$?" -eq $SUCCESS ]

then

echo "Нажата клавиша "О"."

exit $SUCCESS

fi

echo -n "$key" | grep "$arrowleft"

if [ "$?" -eq $SUCCESS ]

then

echo "Нажата клавиша "."

exit $SUCCESS

fi

echo -n "$key" | grep "$insert"

if [ "$?" -eq $SUCCESS ]

then

echo "Нажата клавиша "Insert"."

exit $SUCCESS

fi

echo -n "$key" | grep "$delete"

if [ "$?" -eq $SUCCESS ]

then

echo "Нажата клавиша "Delete"."

exit $SUCCESS

fi

echo " Нажата какая-то другая клавиша."

exit $OTHER

# Упражнения:

# ---------

# 1) Упростите сценарий, заменив множество if-ов

#+ одной конструкцией 'case'.

# 2) Добавьте определение нажатий на клавиши "Home", "End", "PgUp" и "PgDn".

Ключ -t позволяет ограничивать время ожидания ввода командой read (см. Пример 9-4).

Команда read может считывать значения для переменных из файла, перенаправленного на stdin. Если файл содержит не одну строку, то переменной будет присвоена только первая строка. Если команде read будет передано несколько переменных, то первая строка файла будет разбита, по пробелам, на несколько подстрок, каждая из которых будет записана в свою переменную. Будьте осторожны!

Оглавление книги

Оглавление статьи/книги

Генерация: 0.042. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз