Bash počkejte na stisknutí klávesy

Bash Wait Keypress



Příkaz `read` se používá k převzetí vstupu uživatele do skriptu bash. Vstup můžeme získat ve skriptu bash pomocí různých typů voleb pomocí příkazu read. Někdy musíme napsat skript takovým způsobem, že se skript spustí, dokud není stisknuta konkrétní klávesa, nebo se konkrétní skript spustí na základě konkrétní klávesy nebo program čeká na konkrétní dobu, než je jakákoli klávesa stisknuta. Jak můžete napsat bash skript na čekání na konkrétní klíč nebo jakýkoli klíč k některým úkolům, je ukázáno v tomto kurzu pomocí různých příkladů.

Příklad č. 1:

Vytvořte soubor bash s následujícím skriptem. Když skript spustíte, bude pokračovat, dokud uživatel nestiskne libovolnou klávesu. Skript bude čekat na zadání uživatele každé 3 sekundy a pokud uživatel nestiskne žádnou klávesu, vytiskne zprávu, čekání na stisknutí klávesy .







#!/bin/bash
vyhodil 'Pokračujte stiskem libovolné klávesy'
zatímco [ skutečný ];dělat
číst -t 3 -n 1
-li [ $?=0 ];pak
výstup;
jiný
vyhodil 'čekání na stisknutí klávesy'
být
Hotovo

Spusťte skript.



$bashkey1.sh

Výstup:







Příklad č. 2:

Vytvořte soubor bash s následujícím skriptem. V tomto příkladu je použita nekonečná smyčka while, která skončí, když uživatel stiskne ‘q’. Pokud uživatel stiskne jakoukoli klávesu bez „q“, hodnota proměnné čítače se zvýší o 1 a hodnotu vytiskne.

#!/bin/bash
vyhodil 'Ukončete stisknutím' q '
počet=0
zatímco:;dělat
číst -n 1k<&1
-li [[ $k= q]];pak
printf ' nUkončení programu n'
přestávka
jiný
((počet=počet $+1))
printf ' nOpakujte propočet $krát n'
vyhodil 'Ukončete stisknutím' q '
být
Hotovo

Spusťte skript.



$bashkey2.sh

Výstup:

Příklad č. 3:

Vytvořte soubor bash s následujícím skriptem, který bude provádět různé typy úkolů na základě klávesy stisknuté uživatelem. Pokud uživatel stiskne „1“, přidá dva argumenty příkazového řádku a vytiskne. Pokud uživatel stiskne „2“, odečte dva argumenty příkazového řádku a vytiskne. Skript poběží nepřetržitě, dokud uživatel nestiskne „3“.

#!/bin/bash
v1=1 $
v2=2 $
zatímco:
dělat
vyhodil „1. Přidání'
vyhodil „2. Odčítání'
vyhodil '3. Přestat'
vyhodil -n „Typ 1 nebo 2 nebo 3:“
číst -n 1 -t patnáctna
printf ' n'
případ $ a v
1* ) vyhodil '$ v1+$ v2=$ (($ v1+$ v2)) ';;

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

3* ) výstup 0;;


* ) vyhodil 'Zkus to znovu.';;
esac
Hotovo

Spusťte skript se dvěma hodnotami číselných argumentů.

$bashkey3.sh35 patnáct

Výstup:

Příklad č. 4:

Vytvořte soubor bash s následujícím skriptem. Skript se ukončí, když uživatel stiskne klávesu ESC. Tento skript vytiskne klávesy stisknuté uživatelem, dokud není stisknuta klávesa ESC.

#!/bin/bash
uživatelský vstup=''
vyhodil 'Ukončete stisknutím klávesy ESC'
# přečtěte jeden znak
zatímco číst -r -n1klíč
dělat
# if input == ESC klíč
-li [[ $ klíč== $'A' ]];
pak
přestávka;
být
# Přidejte klíč do proměnné, kterou uživatel stiskne.
userinput+=$ klíč
Hotovo
printf ' nZadali jste:$ userinput n'

Spusťte skript.

$bashkey4.sh

Výstup:

Příklad č. 5:

Vytvořte soubor bash s následujícím kódem, který čeká na ukončení skriptu klávesou ENTER. Skript převezme jako vstup název serveru a pokusí se provést ping na server každé 2 sekundy. Pokud příkaz ping získá odpověď ze serveru, ukončí skript zobrazením výstupu, jinak bude čekat na odpověď uživatele nebo klávesu ENTER vytištěním zprávy, Pokouší se připojit s ....

#!/bin/bash
vyhodil 'Zadejte adresu serveru, na který chcete odeslat příkaz ping'
čístserver
zatímco ! ping -C 1 -n -V 2 $ server
dělat
vyhodil 'Pokouším se spojit s.'$ server'
vyhodil „Ukončete stisknutím [ENTER]
číst -s -N 1 -t 1klíč
-li [[ $ klíč== $' x0a' ]];# if input == klávesa ENTER
pak
výstup 0
být
Hotovo
printf '%s n' '$ serverběží'

Spusťte skript.

$bashkey5.sh

Výstup:

Závěr:

Tento tutoriál ukazuje, jak můžete psát bash skript různými způsoby, které budou čekat na zadání uživatele, aby provedl jakýkoli konkrétní úkol nebo skript ukončil. Doufám, že po procvičení výše uvedených příkladů budete schopni napsat skript takovým způsobem, aby mohl počkat na jakékoli stisknutí klávesy a provést konkrétní úkol na základě klávesy stisknuté uživatelem.