บทช่วยสอนสั้นนี้จะสอนคุณให้พรอมป์ตผู้ใช้เพื่อรับอินพุตที่พิมพ์จากสคริปต์ Bash/Shell ของคุณ มันง่ายต่อการเรียนรู้ ง่ายต่อการทำงาน ดังนั้นอ่านต่อไป!
คำสั่ง read
เพื่ออ่านอินพุตผู้ใช้ในสคริปต์ Shell ให้ใช้คำสั่ง read ที่มีชื่ออย่างเหมาะสม มันมีไวยากรณ์ดังนี้:
read OPTIONS VARIABLES
โปรดสังเกตว่า:
- คำสั่ง read จะอ่านบรรทัดจาก standard input และแยกอินพุตนั้นเป็นฟิลด์
- ปกติ standard input คือเทอร์มินัลที่มีอินพุตจากแป้นพิมพ์ของคุณ แต่คุณยังสามารถ pipe หรือ redirect อินพุตไปยังคำสั่ง read ได้
- จากมุมมองของผู้ใช้ พวกเขาจะได้รับพรอมป์ตและต้องป้อนบางอย่างตามด้วยการกดปุ่ม ENTER
- OPTIONS ควรเป็นรายการแฟล็กตัวเลือกจากตารางด้านล่างซึ่งจะปรับเปลี่ยนพฤติกรรมของคำสั่ง read
- VARIABLES เป็นรายการค่าที่จะส่งให้สคริปต์คั่นด้วยช่องว่าง
- หากใช้ตัวเลือก -p คุณสามารถจับคู่กับรายการพรอมป์ตที่ตรงกันเพื่อบอกผู้ใช้ว่าพวกเขาควรป้อนอะไร
- เนื่องจากสามารถจัดหา VARIABLES หลายตัวคั่นด้วยช่องว่างได้ ค่าใดๆ ที่คุณต้องการป้อนซึ่งรวมช่องว่างหรือตัวอักษรพิเศษอื่นๆ ควรมีเครื่องหมายคำพูด
| read ตัวเลือกที่ใช้บ่อย | |
|---|---|
| -a array | กำหนดคำที่อ่านได้ไปยังดัชนีลำดับของตัวแปรอาร์เรย์ ARRAY เริ่มจากศูนย์ |
| -p prompt | แสดงสตริง PROMPT โดยไม่มีบรรทัดใหม่ต่อท้าย ก่อนพยายามอ่าน |
| -r | ไม่อนุญาตให้ backslash หนีบตัวอักษรใดๆ |
| -s | ไม่ echo อินพุตที่มาจากเทอร์มินัล |
| -t timeout | หมดเวลาและคืนค่าล้มเหลว หากบรรทัดอินพุตเต็มไม่ได้ถูกอ่านภายใน TIMEOUT วินาที |
เหมือนเดิม คุณสามารถรับคู่มือผู้ใช้สำหรับคำสั่ง read รวมถึงรายการตัวเลือกทั้งหมดที่พร้อมใช้งาน โดยการรัน:
man read
การพรอมป์ตเพื่อรับอินพุตด้วยคำสั่ง Read
นี่คือตัวอย่างการใช้คำสั่ง read เพื่อรับอินพุตผู้ใช้ในสคริปต์ Bash/Shell
แต่ก่อน…
สิ่งที่ '#!' ใน Linux Shell Scripts คืออะไร?
เพียงรับอินพุต
นี่คือการใช้งานที่ง่ายที่สุดของคำสั่ง – เพียงอ่านค่าเดียวจากอินพุต:
#!/bin/bash read word echo You just typed $word
ข้างต้น อินพุตถูกอ่านเข้าไปในตัวแปรชื่อ $word และแสดงด้วยคำสั่ง echo อีกครั้ง ไม่มี การพรอมป์ต – หน้าจอจะหยุดและรอผู้ใช้พิมพ์บางอย่าง ตามด้วยปุ่ม ENTER – จากนั้นสคริปต์จะดำเนินต่อไปด้วยอินพุตที่ให้มา
เพื่อรับค่าอินพุตหลายค่า ให้เพิ่มตัวแปรเพิ่มเติมในคำสั่ง คั่นด้วยช่องว่าง:
#!/bin/bash read word1 word2 echo You just typed $word1 followed by $word2
พรอมป์ตเพื่อรับอินพุตพร้อมข้อความ
การที่หน้าจอหยุดรออินพุตไม่ได้เป็นมิตรกับผู้ใช้มากนัก ปกติคุณจะต้องการบอกผู้ใช้ว่าพวกเขาควรป้อนอะไร – ชื่อผู้ใช้หรือรหัสผ่าน ตัวอย่างนี้ทำได้ตรงนั้น:
#!/bin/bash read -p 'Username: ' username read -sp 'Password: ' password echo Your username is $username, we will not display your password
ข้างต้น ใช้ตัวเลือก -p เพื่อแสดงพรอมป์ต – ข้อความที่แสดงบอกผู้ใช้ว่าพวกเขาควรป้อนอะไรสำหรับค่าของแต่ละตัวแปร
คุณยังเห็นตัวเลือก -s ใช้สำหรับตัวแปรรหัสผ่าน ซึ่งทำให้อินพุตที่พิมพ์ไม่แสดงออกมา
พรอมป์ตเพื่อรับอินพุตหลายค่าพร้อมข้อความ
คุณสามารถพรอมป์ตและอ่านหลายค่าได้:
#!/bin/bash read -p 'Please type your first and last name: ' first last echo Your name is $first $last
พรอมป์ต Yes/No
นี่คือวิธีถามคำถาม yes/no ให้ผู้ใช้อย่างง่ายโดยใช้ while loop และ case statement สตริงใดๆ ที่เริ่มต้นด้วย y หรือ Y จะถูกตีความว่าเป็น yes สตริงใดๆ ที่เริ่มต้นด้วย n หรือ N จะถูกตีความว่าเป็น no:
#!/bin/bash while true; do read -p "Do you wish to perform this action?" yesno case $yesno in [Yy]* ) echo "You answered yes" ;; [Nn]* ) echo "You answered no, exiting" exit ;; * ) echo "Answer either yes or no!";; esac done
สคริปต์จะดำเนินการจนกว่าจะได้รับ no – และสามารถปรับเปลี่ยนได้ง่ายเพื่อพรอมป์ตผู้ใช้ทำการกระทำใดๆ