Книга: Искусство программирования на языке сценариев командной оболочки
Пример 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 будет передано несколько переменных, то первая строка файла будет разбита, по пробелам, на несколько подстрок, каждая из которых будет записана в свою переменную. Будьте осторожны!
- Пример 11-1. printf в действии
- Пример 11-2. Ввод значений переменных с помощью read
- Пример 11-3. Пример использования команды read без указания переменной для ввода
- Пример 11-4. Ввод многострочного текста с помощью read
- Пример 11-5. Обнаружение нажатия на курсорные клавиши
- Пример 11-6. Чтение командой read из файла через перенаправление
- Пример 11-7. Смена текущего каталога
- Пример 11-8. Команда let, арифметические операции.
- Пример 11-9. Демонстрация команды eval
- Пример 11-10. Принудительное завершение сеанса
- Пример 11-11. Шифрование по алгоритму "rot13"
- Пример 11-12. Замена имени переменной на ее значение, в исходном тексте программы на языке Perl, с помощью eval
- Пример 11-13. Установка значений аргументов с помощью команды set
- Пример 11-14. Изменение значений позиционных параметров (аргументов)
- Пример 11-15. "Сброс" переменной
- Пример 11-16. Передача переменных во вложенный сценарий awk, с помощью export
- Пример 11-17. Прием опций/аргументов, передаваемых сценарию, с помощью getopts
- Пример 11-18. "Подключение" внешнего файла
- Пример 11-19. Пример (бесполезный) сценария, который подключает себя самого.
- Пример 11-21. Сценарий, который запускает себя самого
- Пример 11-2. Ввод значений переменных с помощью read
- Пример 11-11. Шифрование по алгоритму "rot13"
- Пример установочного скрипта
- Пример из практики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Пример 17-10. Блочный комментарий
- Примеры
- Глава 2 Обнаружение адреса