Bash, čakajte na stlačenie klávesu

Bash Wait Keypress



Príkaz `read` sa používa na zadanie vstupu používateľa do skriptu bash. Vstup môžeme vykonať v bash skripte pomocou rôznych typov volieb s príkazom read. Niekedy musíme napísať skript tak, že sa skript spustí, kým nestlačíte konkrétnu klávesu alebo sa konkrétny skript spustí na základe konkrétneho kľúča alebo program počká určitý čas, kým sa stlačí ľubovoľná klávesa. Ako môžete napísať bash skript tak, aby čakal na konkrétny kľúč alebo ľubovoľný kľúč k niektorým úlohám, je v tomto tutoriále ukázané pomocou rôznych príkladov.

Príklad č. 1:

Vytvorte súbor bash pomocou nasledujúceho skriptu. Keď spustíte skript, bude pokračovať, kým používateľ nestlačí ľubovoľný kláves. Skript bude čakať na zadanie používateľa každé 3 sekundy a ak používateľ nestlačí žiadne tlačidlo, správu vytlačí, čakanie na stlačenie klávesu .







#!/bin/bash
zahodil 'Pre pokračovanie stlačte ľubovolnú klávesu'
kým [ pravda ];urobiť
čítať -t 3 -n 1
keby [ $?=0 ];potom
východ;
inak
zahodil „čakanie na stlačenie klávesu“
byť
hotový

Spustite skript.



$bashkey1.sh

Výkon:







Príklad č. 2:

Vytvorte súbor bash pomocou nasledujúceho skriptu. V tomto prípade sa používa nekonečná slučka, ktorá sa skončí, keď používateľ stlačí „q“. Ak používateľ stlačí akékoľvek tlačidlo bez „q“, hodnota premennej počítadla sa zvýši o 1 a hodnotu vytlačí.

#!/bin/bash
zahodil 'Ukončite' stlačením 'q'
počítať=0
kým:;urobiť
čítať -n 1k<&1
keby [[ $ k= q]];potom
printf ' nUkončenie programu n'
prestávka
inak
((počítať=počet dolárov+1))
printf ' nIterovať prepočet dolárovkrát n'
zahodil 'Ukončite' stlačením 'q'
byť
hotový

Spustite skript.



$bashkey2.sh

Výkon:

Príklad č. 3:

Vytvorte súbor bash s nasledujúcim skriptom, ktorý bude vykonávať rôzne typy úloh na základe stlačenia klávesu používateľom. Ak používateľ stlačí „1“, pridá dva argumenty príkazového riadka a vytlačí. Ak používateľ stlačí „2“, odpočíta dva argumenty príkazového riadka a vytlačí. Skript bude bežať nepretržite, kým používateľ nestlačí „3“.

#!/bin/bash
v1=1 dolár
v2=2 doláre
kým:
urobiť
zahodil „1. Dodatok '
zahodil „2. Odčítanie '
zahodil „3. Skončiť '
zahodil -n „Typ 1 alebo 2 alebo 3:“
čítať -n 1 -t pätnásťdo
printf ' n'
prípad $ a v
1* ) zahodil '$ v1+$ v2=$ (($ v1+$ v2)) ';;

2* ) zahodil '$ v1-$ v2=$ (($ v1-$ v2)) ';;

3* ) východ 0;;


* ) zahodil „Skúste to znova.“;;
esac
hotový

Spustite skript s dvoma hodnotami číselných argumentov.

$bashkey3.sh35 pätnásť

Výkon:

Príklad č. 4:

Vytvorte súbor bash pomocou nasledujúceho skriptu. Skript sa ukončí, keď používateľ stlačí kláves ESC. Tento skript bude tlačiť klávesy stlačené užívateľom, kým nestlačíte kláves ESC.

#!/bin/bash
užívateľský vstup=''
zahodil „Ukončite stlačením klávesu ESC“
# prečítajte jeden znak
kým čítať -r -n1kľúč
urobiť
# if input == ESC kľúč
keby [[ $ kľúč== $'' ]];
potom
prestávka;
byť
# Pridajte kľúč do premennej, ktorú stlačí používateľ.
užívateľský vstup+=$ kľúč
hotový
printf ' nZadali ste:$ užívateľský vstup n'

Spustite skript.

$bashkey4.sh

Výkon:

Príklad č. 5:

Vytvorte súbor bash s nasledujúcim kódom, ktorý bude čakať na ukončenie skriptu klávesom ENTER. Skript prevezme ako vstupný názov servera a pokúsi sa vykonať ping na server každé 2 sekundy. Ak príkaz ping dostane odpoveď zo servera, skript ukončí zobrazením výstupu, v opačnom prípade bude čakať na odpoveď používateľa alebo na kláves ENTER pre tlač správy, Pokúša sa spojiť s ...

#!/bin/bash
zahodil „Zadajte adresu servera, na ktorý chcete odoslať príkaz ping“
čítaťserver
kým ! ping -c 1 -n -V 2 $ server
urobiť
zahodil „Pokúša sa spojiť s$ server'
zahodil „Ukončite stlačením [ENTER]
čítať -s -N 1 -t 1kľúč
keby [[ $ kľúč== $' x0a' ]];# if input == kláves ENTER
potom
východ 0
byť
hotový
printf '%s n' '$ serverbeží'

Spustite skript.

$bashkey5.sh

Výkon:

Záver:

Tento tutoriál ukazuje, ako môžete napísať bash skript rôznymi spôsobmi, ktoré počkajú, kým používateľ zadá akúkoľvek konkrétnu úlohu alebo skript ukončí. Dúfam, že po precvičení vyššie uvedených príkladov budete schopní napísať skript tak, aby počkal na akékoľvek stlačenie klávesu a vykonal konkrétnu úlohu na základe klávesu, ktorý stlačil používateľ.