Bash vänta på knapptryckning

Bash Wait Keypress



kommandot 'läs' används för att ta användarinmatning i ett bash -skript. Vi kan ta in inmatning i bash -skript genom att använda olika typer av alternativ med kommandot read. Ibland måste vi skriva manuset på ett sådant sätt att manuset körs tills en viss tangent trycks ned eller det specifika skriptet körs baserat på den specifika tangenten eller så väntar programmet på den specifika tiden tills någon knapp trycks ned. Hur du kan skriva bash -skript för att vänta på en viss nyckel eller någon nyckel till vissa uppgifter visas i den här självstudien med hjälp av olika exempel.

Exempel#1:

Skapa en bash -fil med följande skript. När du kör scriptet fortsätter det tills användaren trycker på valfri knapp. Skriptet väntar på användarens inmatning var tredje sekund och om användaren inte trycker på någon knapp kommer det att skriva ut meddelandet, väntar på knapptryckningen .







#!/bin/bash
kastade ut 'Tryck på valfri tangent för att fortsätta'
medan [ Sann ];do
läsa -t 3 -n 1
om [ $?=0 ];sedan
utgång;
annan
kastade ut 'väntar på knapptryckningen'
vara
Gjort

Kör skriptet.



$våldsamt slagkey1.sh

Produktion:







Exempel 2:

Skapa en bash -fil med följande skript. En oändlig medan loop används i detta exempel som avslutas när användaren trycker på 'q'. Om användaren trycker på någon knapp utan ”q” kommer värdet på räknarvariabeln att ökas med 1 och skriva ut värdet.

#!/bin/bash
kastade ut 'Tryck på' q 'för att avsluta'
räkna=0
medan:;do
läsa -n 1till<&1
om [[ $ k= q]];sedan
printf ' nAvsluta från programmet n'
ha sönder
annan
((räkna=$ räkna+1))
printf ' nIterera för$ räknagånger n'
kastade ut 'Tryck på' q 'för att avsluta'
vara
Gjort

Kör skriptet.



$våldsamt slagkey2.sh

Produktion:

Exempel 3:

Skapa en bash -fil med följande skript som kommer att utföra olika typer av uppgifter baserat på knappen som användaren trycker på. Om användaren trycker på '1' kommer den att lägga till två kommandoradsargument och skriva ut. Om användaren trycker på ‘2’ kommer den att subtrahera två kommandoradsargument och skriva ut. Skriptet körs kontinuerligt tills användaren trycker på '3'.

#!/bin/bash
v1=$ 1
v2=$ 2
medan:
do
kastade ut '1. Tillägg'
kastade ut '2. Subtraktion'
kastade ut '3. Sluta med'
kastade ut -n 'Typ 1 eller 2 eller 3:'
läsa -n 1 -t femtontill
printf ' n'
fall $ a i
1* ) kastade ut '$ v1+$ v2=$ (($ v1+$ v2)) ';;

2* ) kastade ut '$ v1-$ v2=$ (($ v1- $ v2)) ';;

3* ) utgång 0;;


* ) kastade ut 'Försök igen.';;
esac
Gjort

Kör skriptet med två numeriska argumentvärden.

$våldsamt slagkey3.sh35 femton

Produktion:

Exempel#4:

Skapa en bash -fil med följande skript. Skriptet avslutas när användaren trycker på ESC -tangenten. Detta skript kommer att skriva ut knapparna som trycks av användaren tills ESC -tangenten trycks ned.

#!/bin/bash
användarinmatning=''
kastade ut 'Tryck på ESC -knappen för att avsluta'
# läs ett enda tecken
medan läsa -r -n1nyckel-
do
# if input == ESC -nyckel
om [[ $ nyckel== $'Och' ]];
sedan
ha sönder;
vara
# Lägg till nyckeln till variabeln som trycks av användaren.
userinput+=$ nyckel
Gjort
printf ' nDu har skrivit:$ userinput n'

Kör skriptet.

$våldsamt slagkey4.sh

Produktion:

Exempel#5:

Skapa en bash -fil med följande kod som väntar på att ENTER -tangenten avslutar skriptet. Skriptet tar ett servernamn som input och försöker pinga servern varannan sekund. Om ping -kommandot får svaret från servern kommer det att avsluta skriptet genom att visa utmatningen annars väntar det på användarens svar eller ENTER -tangenten genom att skriva ut meddelandet, försöker ansluta med ....

#!/bin/bash
kastade ut 'Ange serveradressen som du vill pinga'
läsaserver
medan ! ping -c 1 -n -I 2 $ server
do
kastade ut 'Försöker ansluta till$ server'
kastade ut 'Tryck på [ENTER] för att avsluta'
läsa -s -N 1 -t 1nyckel-
om [[ $ nyckel== $' x0a' ]];# if input == ENTER -tangent
sedan
utgång 0
vara
Gjort
printf '%s n' '$ serverär igång'

Kör skriptet.

$våldsamt slagkey5.sh

Produktion:

Slutsats:

Denna handledning visar hur du kan skriva bash -skriptet på olika sätt som väntar på att användarens inmatning ska utföra någon specifik uppgift eller avsluta skriptet. Hoppas, efter att ha övat på ovanstående exempel kommer du att kunna skriva manuset på ett sådant sätt att du kan vänta på varje knapptryckning och utföra den specifika uppgiften baserat på knappen som användaren trycker på.