Bash รอการกดแป้น

Bash Wait Keypress



คำสั่ง `read` ใช้เพื่อป้อนข้อมูลของผู้ใช้ในสคริปต์ทุบตี เรารับอินพุตในสคริปต์ทุบตีโดยใช้ตัวเลือกประเภทต่างๆ ด้วยคำสั่ง read บางครั้งเราจำเป็นต้องเขียนสคริปต์ในลักษณะที่สคริปต์จะทำงานจนกว่าจะมีการกดปุ่มใดคีย์หนึ่งหรือสคริปต์เฉพาะจะทำงานตามคีย์เฉพาะหรือโปรแกรมจะรอตามระยะเวลาที่กำหนดจนกว่าจะมีการกดปุ่มใด ๆ วิธีที่คุณสามารถเขียนสคริปต์ทุบตีเพื่อรอคีย์ใดคีย์หนึ่งหรือคีย์ใดๆ สำหรับงานบางรายการจะแสดงในบทช่วยสอนนี้โดยใช้ตัวอย่างต่างๆ

ตัวอย่าง #1:

สร้างไฟล์ bash ด้วยสคริปต์ต่อไปนี้ เมื่อคุณจะเรียกใช้สคริปต์ สคริปต์จะดำเนินต่อไปจนกว่าผู้ใช้จะกดปุ่มใดๆ สคริปต์จะรอการป้อนข้อมูลของผู้ใช้ทุกๆ 3 วินาที และหากผู้ใช้ไม่กดปุ่มใดๆ ก็จะพิมพ์ข้อความ รอการกดแป้น .







#!/bin/bash
โยนออก 'กดปุ่มใดก็ได้เพื่อดำเนินการต่อ'
ในขณะที่ [ จริง ];ทำ
อ่าน -NS 3 -NS 1
ถ้า [ $?=0 ];แล้ว
ทางออก;
อื่น
โยนออก 'รอการกดแป้น'
เป็น
เสร็จแล้ว

เรียกใช้สคริปต์



$ทุบตีคีย์1.sh

เอาท์พุท:







ตัวอย่าง #2:

สร้างไฟล์ bash ด้วยสคริปต์ต่อไปนี้ ตัวอย่างนี้ใช้ infinite while loop ซึ่งจะสิ้นสุดเมื่อผู้ใช้กด 'q' หากผู้ใช้กดปุ่มใด ๆ โดยไม่มี 'q' ค่าของตัวแปรตัวนับจะเพิ่มขึ้น 1 และพิมพ์ค่า

#!/bin/bash
โยนออก 'กด 'q' เพื่อออก'
นับ=0
ในขณะที่::ทำ
อ่าน -NS 1ถึง<&1
ถ้า [[ $ k= q]];แล้ว
printf 'NSออกจากโปรแกรมNS'
หยุดพัก
อื่น
((นับ=$count+1))
printf 'NSย้ำเพื่อ$countครั้งNS'
โยนออก 'กด 'q' เพื่อออก'
เป็น
เสร็จแล้ว

เรียกใช้สคริปต์



$ทุบตีkey2.sh

เอาท์พุท:

ตัวอย่าง #3:

สร้างไฟล์ทุบตีด้วยสคริปต์ต่อไปนี้ที่จะทำงานประเภทต่างๆ ตามคีย์ที่ผู้ใช้กด หากผู้ใช้กด '1' ระบบจะเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งสองรายการและพิมพ์ หากผู้ใช้กด '2' ระบบจะลบอาร์กิวเมนต์บรรทัดคำสั่งสองรายการและพิมพ์ สคริปต์จะทำงานอย่างต่อเนื่องจนกว่าผู้ใช้จะกด '3'

#!/bin/bash
v1=$ 1
v2=$ 2
ในขณะที่:
ทำ
โยนออก '1. ส่วนที่เพิ่มเข้าไป'
โยนออก '2. การลบ'
โยนออก '3. ล้มเลิก'
โยนออก -NS 'ประเภท 1 หรือ 2 หรือ 3 :'
อ่าน -NS 1 -NS สิบห้าถึง
printf 'NS'
กรณี $ ใน
1* ) โยนออก '$v1+$v2=$(($v1+$v2)) ';;

2* ) โยนออก '$v1-$v2=$(($v1-$v2)) ';;

3* ) ทางออก 0;;


* ) โยนออก 'ลองอีกครั้ง.';;
esac
เสร็จแล้ว

เรียกใช้สคริปต์ด้วยค่าอาร์กิวเมนต์ตัวเลขสองค่า

$ทุบตีkey3.sh35 สิบห้า

เอาท์พุท:

ตัวอย่าง #4:

สร้างไฟล์ bash ด้วยสคริปต์ต่อไปนี้ สคริปต์จะสิ้นสุดลงเมื่อผู้ใช้กดปุ่ม ESC สคริปต์นี้จะพิมพ์คีย์ที่ผู้ใช้กดจนกว่าจะกดปุ่ม ESC

#!/bin/bash
ข้อมูลผู้ใช้=''
โยนออก 'กดปุ่ม ESC เพื่อออก'
#อ่านอักษรตัวเดียว
ในขณะที่ อ่าน -NS -n1กุญแจ
ทำ
# ถ้าอินพุต == ปุ่ม ESC
ถ้า [[ $key== $'และ' ]];
แล้ว
หยุดพัก;
เป็น
# เพิ่มคีย์ให้กับตัวแปรที่กดโดยผู้ใช้
อินพุตผู้ใช้+=$key
เสร็จแล้ว
printf 'NSคุณได้พิมพ์:$userinputNS'

เรียกใช้สคริปต์

$ทุบตีkey4.sh

เอาท์พุท:

ตัวอย่าง #5:

สร้างไฟล์ทุบตีด้วยรหัสต่อไปนี้ซึ่งจะรอให้คีย์ ENTER ยุติสคริปต์ สคริปต์จะใช้ชื่อเซิร์ฟเวอร์เป็นอินพุตและจะพยายาม ping เซิร์ฟเวอร์ทุกๆ 2 วินาที หากคำสั่ง ping ได้รับการตอบสนองจากเซิร์ฟเวอร์ คำสั่งจะยุติสคริปต์โดยแสดงผลลัพธ์ มิฉะนั้นจะรอการตอบกลับของผู้ใช้หรือคีย์ ENTER โดยพิมพ์ข้อความ กำลังพยายามเชื่อมต่อกับ….

#!/bin/bash
โยนออก 'ป้อนที่อยู่เซิร์ฟเวอร์ที่คุณต้องการ ping'
อ่านเซิร์ฟเวอร์
ในขณะที่ ! ปิง -ค 1 -NS -ใน 2 $เซิร์ฟเวอร์
ทำ
โยนออก 'กำลังพยายามเชื่อมต่อกับ$เซิร์ฟเวอร์'
โยนออก 'กด [ENTER] เพื่อยุติ'
อ่าน -NS -NS 1 -NS 1กุญแจ
ถ้า [[ $key== $' x0a' ]];# ถ้าอินพุต == ปุ่ม ENTER
แล้ว
ทางออก 0
เป็น
เสร็จแล้ว
printf '%NSNS' '$เซิร์ฟเวอร์กำลังวิ่ง'

เรียกใช้สคริปต์

$ทุบตีkey5.sh

เอาท์พุท:

บทสรุป:

บทช่วยสอนนี้แสดงวิธีที่คุณสามารถเขียนสคริปต์ทุบตีในรูปแบบต่างๆ ที่จะรอให้ผู้ใช้ป้อนข้อมูลทำงานเฉพาะใดๆ หรือยุติสคริปต์ หวังว่า หลังจากฝึกฝนตัวอย่างข้างต้นแล้ว คุณจะสามารถเขียนสคริปต์ในลักษณะที่สามารถรอการกดแป้นใดๆ และทำงานเฉพาะตามแป้นที่ผู้ใช้กดได้