Bash wacht op toetsaanslag

Bash Wait Keypress



Het `read`-commando wordt gebruikt om gebruikersinvoer in een bash-script op te nemen. We kunnen invoer in bash-script opnemen door verschillende soorten opties te gebruiken met het leescommando. Soms moeten we het script zo schrijven dat het script wordt uitgevoerd totdat een specifieke toets wordt ingedrukt of dat het specifieke script wordt uitgevoerd op basis van de specifieke toets of dat het programma een bepaalde tijd wacht totdat een toets wordt ingedrukt. Hoe je bash-script kunt schrijven om te wachten op een bepaalde sleutel of een sleutel voor sommige taken, wordt in deze zelfstudie getoond aan de hand van verschillende voorbeelden.

Voorbeeld 1:

Maak een bash-bestand met het volgende script. Wanneer u het script uitvoert, gaat het door totdat de gebruiker op een willekeurige toets drukt. Het script wacht elke 3 seconden op de invoer van de gebruiker en als de gebruiker op geen enkele toets drukt, wordt het bericht afgedrukt, wachten op de toetsaanslag .







#!/bin/bash
gooide uit 'Druk op een willekeurige toets om door te gaan'
terwijl [ waar ];doen
lezen -t 3 -N 1
indien [ $?=0 ];dan
Uitgang;
anders
gooide uit 'wachten op de toetsaanslag'
zijn
gedaan

Voer het script uit.



$bashkey1.sh

Uitgang:







Voorbeeld #2:

Maak een bash-bestand met het volgende script. In dit voorbeeld wordt een oneindige while-lus gebruikt die eindigt wanneer de gebruiker op 'q' drukt. Als de gebruiker op een toets drukt zonder 'q', wordt de waarde van de tellervariabele met 1 verhoogd en wordt de waarde afgedrukt.

#!/bin/bash
gooide uit 'Druk op 'q' om af te sluiten'
Graaf=0
terwijl:;doen
lezen -N 1tot<&1
indien [[ $ k= q]];dan
printf 'NAfsluiten van het programmaN'
pauze
anders
((Graaf=$tel+1))
printf 'Nitereren voor$telkeerN'
gooide uit 'Druk op 'q' om af te sluiten'
zijn
gedaan

Voer het script uit.



$bashkey2.sh

Uitgang:

Voorbeeld #3:

Maak een bash-bestand met het volgende script dat verschillende soorten taken zal uitvoeren op basis van de toets die door de gebruiker is ingedrukt. Als de gebruiker op '1' drukt, worden twee opdrachtregelargumenten toegevoegd en wordt afgedrukt. Als de gebruiker op '2' drukt, worden twee opdrachtregelargumenten afgetrokken en afgedrukt. Het script wordt continu uitgevoerd totdat de gebruiker op '3' drukt.

#!/bin/bash
v1=$ 1
v2=$ 2
terwijl:
doen
gooide uit '1. Toevoeging'
gooide uit '2. aftrekken'
gooide uit '3. Ontslag nemen'
gooide uit -N 'Type 1 of 2 of 3 :'
lezen -N 1 -t vijftientot
printf 'N'
geval $ a in
1* ) gooide uit '$v1+$v2=$(($v1+$v2)) ';;

2* ) gooide uit '$v1-$v2=$(($v1-$v2)) ';;

3* ) Uitgang 0;;


* ) gooide uit 'Probeer het opnieuw.';;
esac
gedaan

Voer het script uit met twee numerieke argumentwaarden.

$bashkey3.sh35 vijftien

Uitgang:

Voorbeeld #4:

Maak een bash-bestand met het volgende script. Het script wordt beëindigd wanneer de gebruiker op de ESC-toets drukt. Dit script drukt de toetsen af ​​die door de gebruiker zijn ingedrukt totdat de ESC-toets wordt ingedrukt.

#!/bin/bash
gebruikers invoer=''
gooide uit 'Druk op de ESC-toets om te stoppen'
# lees een enkel karakter
terwijl lezen -R -n1toets
doen
# if input == ESC-toets
indien [[ $sleutel== $'En' ]];
dan
pauze;
zijn
# Voeg de toets toe aan de variabele die door de gebruiker wordt ingedrukt.
gebruikersinvoer+=$sleutel
gedaan
printf 'NJe hebt getypt:$gebruikersinvoerN'

Voer het script uit.

$bashkey4.sh

Uitgang:

Voorbeeld #5:

Maak een bash-bestand met de volgende code die wacht op de ENTER-toets om het script te beëindigen. Het script neemt een servernaam als invoer en probeert de server elke 2 seconden te pingen. Als de ping-opdracht het antwoord van de server ontvangt, wordt het script beëindigd door de uitvoer weer te geven, anders wacht het op het antwoord van de gebruiker of de ENTER-toets door het bericht af te drukken, probeert verbinding te maken met ....

#!/bin/bash
gooide uit 'Vul het serveradres in dat je wilt pingen'
lezenserver
terwijl ! ping -C 1 -N -IN 2 $server
doen
gooide uit 'Proberen verbinding te maken met'$server'
gooide uit 'Druk op [ENTER] om te beëindigen'
lezen -s -N 1 -t 1toets
indien [[ $sleutel== $' x0a' ]];# if input == ENTER-toets
dan
Uitgang 0
zijn
gedaan
printf '%sN' '$serveris aan het rennen'

Voer het script uit.

$bashkey5.sh

Uitgang:

Conclusie:

Deze zelfstudie laat zien hoe u het bash-script op verschillende manieren kunt schrijven die wachten op de invoer van de gebruiker om een ​​specifieke taak uit te voeren of het script te beëindigen. Ik hoop dat je, na het oefenen van de bovenstaande voorbeelden, in staat zult zijn om het script op zo'n manier te schrijven dat het kan wachten op elke toetsaanslag en de specifieke taak kan uitvoeren op basis van de toets die door de gebruiker wordt ingedrukt.