Bash περιμένετε το πάτημα του πλήκτρου

Bash Wait Keypress



Η εντολή `read` χρησιμοποιείται για τη λήψη εισόδου χρήστη σε ένα σενάριο bash. Μπορούμε να λάβουμε είσοδο στο σενάριο bash χρησιμοποιώντας διάφορους τύπους επιλογών με την εντολή ανάγνωσης. Μερικές φορές χρειάζεται να γράψουμε το σενάριο με τέτοιο τρόπο ώστε το σενάριο να εκτελείται έως ότου πατηθεί ένα συγκεκριμένο κλειδί ή το συγκεκριμένο σενάριο θα εκτελεστεί με βάση το συγκεκριμένο κλειδί ή το πρόγραμμα θα περιμένει το συγκεκριμένο χρονικό διάστημα μέχρι να πατηθεί οποιοδήποτε πλήκτρο. Ο τρόπος με τον οποίο μπορείτε να γράψετε σενάριο bash για να περιμένετε οποιοδήποτε συγκεκριμένο κλειδί ή οποιοδήποτε κλειδί για ορισμένες εργασίες παρουσιάζεται σε αυτό το σεμινάριο χρησιμοποιώντας διαφορετικά παραδείγματα.

Παράδειγμα#1:

Δημιουργήστε ένα αρχείο bash με το ακόλουθο σενάριο. Όταν εκτελείτε το σενάριο, θα συνεχίσει μέχρι ο χρήστης να πατήσει οποιοδήποτε πλήκτρο. Το σενάριο θα περιμένει την εισαγωγή του χρήστη κάθε 3 δευτερόλεπτα και εάν ο χρήστης δεν πατήσει κανένα πλήκτρο, τότε θα εκτυπώσει το μήνυμα, περιμένοντας το πάτημα του πλήκτρου Το







#!/bin/bash
πέταξε έξω 'Πατήστε οποιοδήποτε κουμπί για να συνεχίσετε'
ενώ [ αληθής ]?κάνω
ανάγνωση -t 3 1
αν [ $?=0 ]?τότε
έξοδος?
αλλού
πέταξε έξω «περιμένω το πάτημα του πλήκτρου»
είναι
Έγινε

Εκτελέστε το σενάριο.



$κτυπώ δυνατάκλειδί1.σ

Παραγωγή:







Παράδειγμα#2:

Δημιουργήστε ένα αρχείο bash με το ακόλουθο σενάριο. Σε αυτό το παράδειγμα χρησιμοποιείται ένας άπειρος βρόχος while που θα τερματιστεί όταν ο χρήστης πατήσει το 'q'. Εάν ο χρήστης πατήσει οποιοδήποτε πλήκτρο χωρίς «q», τότε η τιμή της μεταβλητής μετρητή θα αυξηθεί κατά 1 και θα εκτυπώσει την τιμή.

#!/bin/bash
πέταξε έξω 'Πατήστε' q 'για έξοδο'
μετρώ=0
ενώ:κάνω
ανάγνωση 1προς το<&1
αν [[ $ k= q]]?τότε
printf ' nΑποχώρηση από το πρόγραμμα n'
Διακοπή
αλλού
((μετρώ=$ καταμέτρηση+1))
printf ' nΕπαναλαμβάνω για$ καταμέτρησηφορές n'
πέταξε έξω 'Πατήστε' q 'για έξοδο'
είναι
Έγινε

Εκτελέστε το σενάριο.



$κτυπώ δυνατάκλειδί2.σ

Παραγωγή:

Παράδειγμα#3:

Δημιουργήστε ένα αρχείο bash με το ακόλουθο σενάριο που θα εκτελεί διαφορετικούς τύπους εργασιών με βάση το πλήκτρο που πατά ο χρήστης. Εάν ο χρήστης πατήσει ‘1’, τότε θα προσθέσει δύο ορίσματα της γραμμής εντολών και θα εκτυπώσει. Εάν ο χρήστης πατήσει ‘2’ τότε θα αφαιρέσει δύο ορίσματα της γραμμής εντολών και θα εκτυπώσει. Το σενάριο θα εκτελείται συνεχώς μέχρι ο χρήστης να πατήσει το '3'.

#!/bin/bash
v1=$ 1
v2=$ 2
ενώ:
κάνω
πέταξε έξω '1. Πρόσθεση'
πέταξε έξω '2. Αφαίρεση'
πέταξε έξω '3. Εγκαταλείπω'
πέταξε έξω 'Τύπος 1 ή 2 ή 3:'
ανάγνωση 1 -t δεκαπέντεπρος το
printf ' n'
υπόθεση $ α σε
1* ) πέταξε έξω '$ v1+$ v2=$ (($ v1+$ v2)) ';;

2* ) πέταξε έξω '$ v1-$ v2=$ (($ v1- $ v2)) ';;

3* ) έξοδος 0;;


* ) πέταξε έξω 'Προσπάθησε ξανά.';;
esac
Έγινε

Εκτελέστε το σενάριο με δύο αριθμητικές τιμές ορίσματος.

$κτυπώ δυνατάκλειδί3.σ35 δεκαπέντε

Παραγωγή:

Παράδειγμα#4:

Δημιουργήστε ένα αρχείο bash με το ακόλουθο σενάριο. Το σενάριο θα τερματιστεί όταν ο χρήστης πατήσει το πλήκτρο ESC. Αυτό το σενάριο θα εκτυπώσει τα πλήκτρα που έχει πατήσει ο χρήστης μέχρι να πατηθεί το πλήκτρο ESC.

#!/bin/bash
εισαγωγή χρήστη=''
πέταξε έξω 'Πατήστε το πλήκτρο ESC για έξοδο'
# διαβάστε έναν μόνο χαρακτήρα
ενώ ανάγνωση -r -ν1κλειδί
κάνω
# εάν εισάγετε == κλειδί ESC
αν [[ $ κλειδί== $'Και' ]]?
τότε
Διακοπή?
είναι
# Προσθέστε το κλειδί στη μεταβλητή που πατά ο χρήστης.
userinput+=$ κλειδί
Έγινε
printf ' nΈχετε πληκτρολογήσει:$ userinput n'

Εκτελέστε το σενάριο.

$κτυπώ δυνατάκλειδί4.σ

Παραγωγή:

Παράδειγμα#5:

Δημιουργήστε ένα αρχείο bash με τον ακόλουθο κώδικα που θα περιμένει το πλήκτρο ENTER για να τερματίσει το σενάριο. Το σενάριο θα λάβει ένα όνομα διακομιστή ως είσοδο και θα προσπαθεί να κάνει ping στον διακομιστή κάθε 2 δευτερόλεπτα. Εάν η εντολή ping λάβει την απάντηση από τον διακομιστή, τότε θα τερματίσει το σενάριο εμφανίζοντας την έξοδο, διαφορετικά θα περιμένει την απάντηση του χρήστη ή το πλήκτρο ENTER εκτυπώνοντας το μήνυμα, Προσπαθώντας να συνδεθείτε με….

#!/bin/bash
πέταξε έξω 'Εισαγάγετε τη διεύθυνση διακομιστή που θέλετε να κάνετε ping'
ανάγνωσηυπηρέτης
ενώ ! πινγκ -ντο 1 -ΣΕ 2 διακομιστή $
κάνω
πέταξε έξω «Προσπαθώ να συνδεθώ μεδιακομιστή $'
πέταξε έξω 'Πατήστε [ENTER] για τερματισμό'
ανάγνωση -μικρό 1 -t 1κλειδί
αν [[ $ κλειδί== $'x0a' ]]?# εάν εισάγετε == κλειδί ENTER
τότε
έξοδος 0
είναι
Έγινε
printf '%μικρό n' 'διακομιστή $τρέχει'

Εκτελέστε το σενάριο.

$κτυπώ δυνατάκλειδί5.σ

Παραγωγή:

Συμπέρασμα:

Αυτό το σεμινάριο δείχνει πώς μπορείτε να γράψετε το σενάριο bash με διάφορους τρόπους που θα περιμένουν την είσοδο του χρήστη για να κάνει οποιαδήποτε συγκεκριμένη εργασία ή να τερματίσει το σενάριο. Ελπίζω, αφού εξασκηθείτε στα παραπάνω παραδείγματα, θα μπορείτε να γράψετε το σενάριο με τέτοιο τρόπο ώστε να μπορεί να περιμένει κάθε πάτημα του πλήκτρου και να εκτελέσετε τη συγκεκριμένη εργασία με βάση το πλήκτρο που πατά ο χρήστης.