Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

วิธีแจ้งให้ผู้ใช้ป้อนข้อมูลใน Bash/Shell Scripts

บทแนะนำสั้น ๆ นี้จะสอนให้คุณแจ้งให้ผู้ใช้พิมพ์อินพุตจากสคริปต์ Bash/Shell ของคุณ เรียนรู้ง่าย ทำง่าย อ่านต่อไป!

อ่าน คำสั่ง

หากต้องการอ่านข้อมูลที่ผู้ใช้ป้อนในเชลล์สคริปต์ ให้ใช้ชื่อ read สั่งการ. มีรูปแบบดังนี้:

read OPTIONS VARIABLES

โปรดทราบว่า:

  • อ่าน คำสั่งจะอ่านบรรทัดจาก อินพุตมาตรฐาน และแบ่งข้อมูลออกเป็นช่องต่างๆ
    • โดยปกติ อินพุตมาตรฐาน เป็นเทอร์มินัลที่มีอินพุตจากแป้นพิมพ์ แต่คุณยังไปป์หรือเปลี่ยนเส้นทางอินพุตไปที่ อ่าน คำสั่ง
    • จากมุมมองของผู้ใช้ พวกเขาจะได้รับข้อความแจ้งและต้องป้อนบางอย่างตามด้วยการกดปุ่ม ENTER
  • ตัวเลือก ควรเป็นรายการแฟล็กตัวเลือกจากตารางด้านล่างซึ่งจะปรับเปลี่ยนพฤติกรรมของ อ่าน คำสั่ง
  • ตัวแปร เป็นรายการค่าที่จะส่งผ่านไปยังสคริปต์คั่นด้วยช่องว่าง
    • ถ้า -p ใช้ตัวเลือกนี้ คุณสามารถจับคู่สิ่งนี้กับรายการข้อความแจ้งที่ตรงกันเพื่อบอกผู้ใช้ว่าควรป้อนอะไร
    • เป็นหลาย ตัวแปร สามารถระบุได้โดยเว้นวรรค ค่าใดๆ ที่คุณต้องการป้อน ซึ่งรวมถึงช่องว่างหรืออักขระพิเศษอื่นๆ ควรยกมา
อ่าน ตัวเลือกที่ใช้กันทั่วไป
-a อาร์เรย์ กำหนดคำที่อ่านให้กับดัชนีตามลำดับของตัวแปรอาร์เรย์ ARRAY เริ่มต้นที่ศูนย์
-p พร้อมท์ ส่งออกสตริง PROMPT โดยไม่ต้องขึ้นบรรทัดใหม่ก่อนพยายามอ่าน
-r ไม่อนุญาตให้แบ็กสแลชหลีกเลี่ยงอักขระใดๆ
-s อย่าสะท้อนอินพุตที่มาจากเทอร์มินัล
-t หมดเวลา หมดเวลาและส่งคืนความล้มเหลวหากไม่ได้อ่านบรรทัดอินพุตทั้งหมดภายใน TIMEOUT วินาที

ตามปกติ คุณจะได้รับคู่มือผู้ใช้สำหรับอ่าน คำสั่ง รวมถึงรายการตัวเลือกทั้งหมดที่มี โดยการเรียกใช้:

man 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

แจ้งว่าใช่/ไม่ใช่

วิธีถามคำถามใช่/ไม่ใช่ง่ายๆ กับผู้ใช้โดยใช้ while loop และ คำชี้แจงกรณี . สตริงใดๆ ที่ขึ้นต้นด้วย y หรือ ใช่ จะตีความว่า ใช่ * สตริงใดๆ ที่ขึ้นต้นด้วย n หรือ ไม่มี จะตีความว่า ไม่ :

#!/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

สคริปต์จะดำเนินการจนกว่าจะ ไม่ ได้รับ – และสามารถปรับเปลี่ยนได้อย่างง่ายดายเพื่อให้ผู้ใช้ดำเนินการใดๆ