วิธีการเขียนทับ Bash WHILE-Loops

คำสั่งไวยากรณ์และตัวอย่าง

คุณสามารถเรียกใช้ลำดับของคำสั่งโดยการเขียนลงในไฟล์สคริปต์และเรียกใช้งานได้

ไฟล์สคริปต์เป็นเพียงไฟล์ข้อความโดยปกติจะประกอบด้วยส่วนขยายไฟล์ .SH ซึ่งมีลำดับคำสั่งที่สามารถเรียกใช้จากบรรทัดคำสั่ง ( เชลล์ )

ในขณะที่ตัวอย่าง Loop

ด้านล่างเป็นตัวอย่างของลูปขณะ เมื่อรันไฟล์สคริปต์นี้จะพิมพ์หมายเลข 1 ถึง 9 บนหน้าจอ คำสั่ง while ช่วยให้คุณมีความยืดหยุ่นในการระบุเงื่อนไขการยกเลิกมากกว่า for-loop

#! / bin / bash count = 1 ในขณะที่ [count -le 9] ทำ echo "$ count" sleep 1 ((นับ ++)) ทำ

ตัวอย่างเช่นคุณสามารถทำให้สคริปต์ก่อนหน้าเป็นลูปที่ไม่มีขีด จำกัด ได้โดยละเว้นคำสั่งที่เพิ่มขึ้น "((นับ ++))":

#! / bin / bash count = 1 ในขณะที่ [$ count -le 9] ทำ echo "$ count" sleep 1 done

คำสั่ง "sleep 1" จะหยุดการทำงานชั่วคราวเป็นเวลา 1 วินาทีในแต่ละการทำซ้ำ ใช้ แป้นพิมพ์ ลัด Ctrl + C เพื่อยุติกระบวนการ

นอกจากนี้คุณยังสามารถสร้างลูปแบบไม่ จำกัด โดยการใส่เครื่องหมายจุดคู่เป็นเงื่อนไข:

#! / bin / bash count = 1 ขณะที่: ทำ echo "$ count" sleep 1 ((นับ ++)) ทำเสร็จแล้ว

เพื่อที่จะใช้เงื่อนไขหลายในวงขณะที่คุณต้องใช้เครื่องหมายวงเล็บคู่วงเล็บ:

count = 1 done = 0 while [[$ count -le 9] && [$ done == 0] ทำ echo "$ count" sleep 1 ((นับ ++)) ถ้า [count == 5]; แล้ว $ done = 1 fi เสร็จแล้ว

ในสคริปต์นี้ตัวแปร "done" จะเริ่มต้นเป็น 0 และตั้งค่าเป็น 1 เมื่อนับถึง 5 เงื่อนไขลูประบุว่าลูปขณะจะดำเนินต่อไปตราบเท่าที่ "count" น้อยกว่าเก้าและ "done" เท่ากับ เป็นศูนย์ ดังนั้นลูปจึงออกเมื่อจำนวนนั้นเท่ากับ 5

"&&" หมายถึงตรรกะ "และ" และ "||" หมายถึงเหตุผล "หรือ"

สัญกรณ์ทางเลือกสำหรับคำสันธาน "และ" และ "หรือ" ในสภาวะคือ "- a" และ "o" ด้วยวงเล็บเหลี่ยมเดียว เงื่อนไขข้างต้น:

[[$ count -le 9] && [$ done == 0]]

... อาจถูกเขียนใหม่เป็น:

[$ count -le 9] -a [$ done == 0]

การอ่านไฟล์ข้อความทำได้โดยใช้ลูปขณะ ในตัวอย่างต่อไปนี้สคริปต์ทุบตีอ่านเนื้อหาบรรทัดโดยบรรทัดของไฟล์ที่เรียกว่า "inventory.txt:"

FILE = inventory.txt exec 6

บรรทัดแรกกำหนดชื่อไฟล์ที่ป้อนเข้ากับตัวแปร "FILE" บรรทัดที่สองจะบันทึก "อินพุตมาตรฐาน" ในไฟล์อธิบาย "6" (อาจเป็นค่าระหว่าง 3 ถึง 9) "อินพุตมาตรฐาน" สามารถเรียกคืนไปยังตัวบอกไฟล์ "0" ที่ท้ายสคริปต์ได้ (ดูคำสั่ง "exec 0 ในบรรทัดที่ 3 ไฟล์อินพุทถูกกำหนดให้กับ" descriptor "ไฟล์ที่ใช้ สำหรับอินพุตมาตรฐานคำสั่ง "อ่านแล้ว" จะอ่านบรรทัดจากไฟล์ในการวนซ้ำแต่ละครั้งและกำหนดให้กับตัวแปร "line1"

เพื่อที่จะออกจาก while while ก่อนเวลาคุณสามารถใช้คำสั่ง break เช่นนี้ได้:

count = 1 done = 0 ขณะที่ [count -le 9] ทำ echo "$ count" sleep 1 ((นับ ++)) ถ้า [count == 5] จากนั้นให้แบ่ง echo เสร็จแล้ว

คำสั่ง break จะข้ามการเรียกใช้โปรแกรมไปยังจุดสิ้นสุดในขณะที่วนซ้ำและรันคำสั่งใด ๆ ต่อไปนี้ ในกรณีนี้ข้อความ "echo Finished"

ในทางกลับกันคำสั่งต่อจะข้ามเฉพาะส่วนที่เหลือของคำสั่งวนรอบขณะวนซ้ำในปัจจุบันและข้ามไปยังการทำซ้ำถัดไป:

จำนวน = 1 ทำ = 0 ขณะที่ [นับ $ 9] นอน 1 ((นับ ++)) ถ้า [นับ $ == 5] แล้วดำเนินการต่อ echo "นับ $" ทำเสร็จแล้ว echo

ในกรณีนี้ข้อความ "continue" จะถูกเรียกใช้เมื่อตัวแปร "count" ถึง 5 ซึ่งหมายความว่าคำสั่งที่ตามมา (echo "$ count") จะไม่ถูกเรียกใช้ในการทำซ้ำนี้ (เมื่อค่า "count" เท่ากับ 5)