Bash подождите нажатия клавиши

Bash Wait Keypress



Команда `read` используется для ввода данных пользователем в сценарий bash. Мы можем вводить данные в сценарии bash, используя различные типы параметров с командой чтения. Иногда нам нужно написать сценарий таким образом, чтобы сценарий выполнялся до тех пор, пока не будет нажата определенная клавиша, или конкретный сценарий будет выполняться на основе определенной клавиши, или программа будет ждать определенное количество времени, пока не будет нажата какая-либо клавиша. Как вы можете написать сценарий bash для ожидания какого-либо конкретного ключа или любого ключа к некоторым задачам, показано в этом руководстве на различных примерах.

Пример №1:

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







#! / bin / bash
выбросил 'Нажмите любую клавишу чтобы продолжить'
в то время как [ правда ];делать
читать -t 3 -n 1
если [ $?знак равно0 ];тогда
выход;
еще
выбросил 'ожидание нажатия клавиши'
быть
сделано

Запускаем скрипт.



$трепатьkey1.sh

Выход:







Пример №2:

Создайте файл bash со следующим сценарием. В этом примере используется бесконечный цикл while, который завершится, когда пользователь нажмет «q». Если пользователь нажимает любую клавишу без «q», значение переменной счетчика будет увеличено на 1 и напечатано значение.

#! / bin / bash
выбросил 'Нажмите' q 'для выхода'
считатьзнак равно0
в то время как:;делать
читать -n 1к<&1
если [[ $ k= q]];тогда
printf ' пВыход из программы п'
перерыв
еще
((считатьзнак равно$ count+1))
printf ' пИтерация для$ countраз п'
выбросил 'Нажмите' q 'для выхода'
быть
сделано

Запускаем скрипт.



$трепатьkey2.sh

Выход:

Пример № 3:

Создайте файл bash со следующим сценарием, который будет выполнять различные типы задач в зависимости от клавиши, нажатой пользователем. Если пользователь нажимает «1», он добавляет два аргумента командной строки и печатает. Если пользователь нажимает «2», он вычитает два аргумента командной строки и печатает. Сценарий будет работать непрерывно, пока пользователь не нажмет «3».

#! / bin / bash
v1знак равно1 доллар
v2знак равно2 доллара
в то время как:
делать
выбросил '1. Добавление'
выбросил '2. Вычитание '
выбросил '3. Покидать'
выбросил -n 'Тип 1, 2 или 3:'
читать -n 1 -t пятнадцатьк
printf ' п'
кейс $ а в
1* ) выбросил '$ v1+$ v2знак равно$ (($ v1 + $ v2)) ';;

2* ) выбросил '$ v1-$ v2знак равно$ (($ v1- $ v2)) ';;

3* ) выход 0;;


* ) выбросил 'Попробуйте снова.';;
esac
сделано

Запустите сценарий с двумя числовыми значениями аргументов.

$трепатьkey3.sh35 год пятнадцать

Выход:

Пример №4:

Создайте файл bash со следующим сценарием. Сценарий завершится, когда пользователь нажмет клавишу ESC. Этот сценарий будет печатать клавиши, нажатые пользователем, пока не будет нажата клавиша ESC.

#! / bin / bash
пользовательский вводзнак равно''
выбросил 'Нажмите клавишу ESC, чтобы выйти'
# читать один символ
в то время как читать -n1ключ
делать
# если input == клавиша ESC
если [[ $ ключ== $'А также' ]];
тогда
перерыв;
быть
# Добавить ключ к переменной, которую нажимает пользователь.
userinput + =$ ключ
сделано
printf ' пВы набрали:$ userinput п'

Запускаем скрипт.

$трепатьkey4.sh

Выход:

Пример 5:

Создайте файл bash со следующим кодом, который будет ждать, пока клавиша ENTER завершит сценарий. Сценарий принимает имя сервера в качестве входных данных и будет пытаться проверить связь с сервером каждые 2 секунды. Если команда ping получает ответ от сервера, она завершает выполнение сценария, отображая вывод, в противном случае она будет ждать ответа пользователя или клавиши ENTER, напечатав сообщение «Попытка соединиться с…».

#! / bin / bash
выбросил 'Введите адрес сервера, который вы хотите пинговать'
читатьсервер
в то время как ! пинг -c 1 -n 2 $ сервер
делать
выбросил 'Пытаюсь установить связь с$ сервер'
выбросил 'Нажмите [ENTER] для завершения'
читать -s -N 1 -t 1ключ
если [[ $ ключ== $' x0a' ]];# если ввод == клавиша ENTER
тогда
выход 0
быть
сделано
printf '% s п' '$ серверэто работает'

Запускаем скрипт.

$трепатьkey5.sh

Выход:

Заключение:

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