Bash 'While' Loop: บทช่วยสอนและตัวอย่าง

การใช้ลูป 'while' ในการเขียนสคริปต์ Bash เพื่อวนซ้ำคำสั่ง

Bash (Bourne Again Shell) เป็นพรอมต์คำสั่งเชลล์และภาษาสคริปต์ในระบบปฏิบัติการ GNU/Linux เป็นเชลล์เริ่มต้นสำหรับลีนุกซ์ส่วนใหญ่.

เช่นเดียวกับภาษาสคริปต์ส่วนใหญ่ Bash มีรูปแบบการวนซ้ำเพื่อทำซ้ำงานที่คล้ายกันหลายครั้ง ในบทความนี้ เราจะมาเรียนรู้วิธีการใช้งาน ในขณะที่ วนซ้ำใน Bash

บทนำ

ดิ ในขณะที่ ลูปใน Bash ใช้เพื่อดำเนินการคำสั่ง (คำสั่งที่ดำเนินการ) หลายครั้งตามผลลัพธ์ของคำสั่งอื่น (คำสั่งเงื่อนไข) คำสั่งที่ดำเนินการจะทำงานต่อไปจนกว่าคำสั่ง condition จะทำงานสำเร็จ (เช่น ส่งคืนสถานะ 0 คำสั่งใดๆ ใน Linux จะส่งกลับ 0 สำหรับความสำเร็จและจำนวนเต็มที่ไม่ใช่ศูนย์สำหรับความล้มเหลว)

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

ไวยากรณ์ทั่วไป

ไวยากรณ์ทั่วไปสำหรับ ในขณะที่ วนซ้ำใน Bash คือ:

ในขณะที่ทำเสร็จ

รายการคำสั่งดำเนินการจะทำงานต่อไปจนกว่าคำสั่งสุดท้ายในรายการคำสั่งเงื่อนไขจะรันได้สำเร็จและออกด้วยสถานะ 0 ในการวนซ้ำ เมื่อคำสั่งเงื่อนไขสุดท้ายล้มเหลว ลูปจะออก

ผู้ใช้สามารถระบุไฟล์ปฏิบัติการได้ในรายการคำสั่ง อาจเป็นโปรแกรม Linux มาตรฐานหรือโปรแกรมผู้ใช้หรือสคริปต์ที่กำหนดเอง แต่ละคำสั่งควรอยู่ในบรรทัดใหม่หรือคั่นด้วยเครื่องหมายอัฒภาคในบรรทัดเดียวกัน

เรามาดูตัวอย่างกัน

วนซ้ำจนกว่าตัวแปรจะมีค่าเฉพาะ: ลูปต่อไปนี้ดำเนินการจนถึงค่าของตัวแปร x ไม่เท่ากับ 10

x=0 ในขณะที่ [[ $x -ne 10 ]] ทำ echo $x ((x++)) เสร็จสิ้น

ในการวนซ้ำแต่ละครั้ง เรากำลังตรวจสอบว่าค่าของ x เป็น 10 หรือไม่ ค่ากำลังถูกตรวจสอบโดยใช้เครื่องหมาย ทดสอบ สั่งการ. [[ การแสดงออก ]] คือ syntax สำหรับคำสั่ง test (See แบบทดสอบผู้ชาย). ที่นี่เนื่องจากเราใช้ -เน โอเปอเรเตอร์ (ซึ่งย่อมาจาก 'ไม่เท่ากับ') คำสั่งทดสอบจะส่งกลับ 0 นั่นคือความสำเร็จ หากค่าของ x ไม่ใช่ 10 และจะส่งกลับค่าที่ไม่เท่ากับศูนย์ กล่าวคือ ความล้มเหลวหากค่าของ x คือ 10

จากนั้นภายใน ทำ...เสร็จ บล็อก เราพิมพ์ค่าของ x และเพิ่มค่านั้น เมื่อค่าของ x เป็น 10 คำสั่งทดสอบจะคืนค่าสถานะที่ไม่ใช่ศูนย์ และออกจากลูป

บันทึก: ตัวแปรดัชนีที่จะใช้ใน while loop จะต้องถูกเตรียมข้อมูลเบื้องต้นก่อน while loop หรือในคำสั่ง condition ซึ่งต่างจาก for loop ซึ่งช่วยให้สามารถเริ่มต้นตัวแปรโดยปริยายได้

ด้วยคำสั่งหลายเงื่อนไข: ลูปต่อไปนี้สร้าง 5 ไดเร็กทอรีชื่อ dir0, dir1, ... dir4.

z=0 ในขณะที่ echo "รายการไฟล์:" ls -l [[ $z -ne 5 ]] ทำ echo "กำลังสร้าง dir$z..." mkdir dir$z ((z++)) เสร็จสิ้น

คำสั่งแรก echo "รายการไฟล์:" และ ลส -ล จะดำเนินการอย่างสมบูรณ์หนึ่งครั้ง ความสำเร็จหรือความล้มเหลวไม่มีผลกระทบต่อระยะเวลาที่ลูปจะทำงาน

จากนั้นคำสั่งทดสอบสำหรับตรวจสอบค่าของตัวแปร z จะทำงาน จนกว่าค่าของ z จะไม่ใช่ 5 คำสั่ง test จะส่งคืนสถานะความสำเร็จ และด้วยเหตุนี้การวนซ้ำจะยังคงทำงานต่อไป คำสั่งเงื่อนไขและคำสั่งที่ดำเนินการทำงานต่อไปตามลำดับ ในที่นี้ สำหรับการวนซ้ำแต่ละครั้ง คำสั่งจะรันคำสั่ง echo และคำสั่ง ls ในเงื่อนไขก่อน จากนั้นคำสั่งเงื่อนไขที่ 3 จะตรวจสอบค่าของ z ถ้าไม่ใช่ 5 จะเข้าสู่ลูปและรันคำสั่งที่กำหนด

ทำลายและดำเนินการต่อ

คำสั่งแบ่งสำหรับการออกแบบมีเงื่อนไข

เรายังสามารถใช้คำสั่งแบบมีเงื่อนไขได้ ถ้า ภายในวง ดิ ถ้า คำสั่งสามารถใช้ได้กับ a หยุดพัก คำสั่งสำหรับการออกจากลูปแบบมีเงื่อนไข

x=0 ในขณะที่ [[ $x -ne 10 ]] ทำถ้า [[ $x -eq 5 ]] พัง echo $x ((x++)) เสร็จสิ้น

ในขณะที่ลูปด้านบนจะพิมพ์ตัวเลขตั้งแต่ 0 ถึง 4 จากนั้นเมื่อค่าของ i เป็น 5 มันจะแตกออกจากลูป มีการใช้งานเฉพาะเมื่อต้องออกจากลูปเมื่อคำสั่งให้เอาต์พุตเฉพาะ

ดำเนินการต่อคำสั่งเพื่อข้ามการวนซ้ำแบบมีเงื่อนไข

Bash ยังมี a ดำเนินต่อ คำสั่ง เพื่อข้ามส่วนที่เหลือของการวนซ้ำในลูปหากเป็นไปตามเงื่อนไขเฉพาะ

x=0 ในขณะที่ [[ $x -ne 10 ]] ทำถ้า [[ $x -eq 5 ]] ดำเนินการต่อ fi echo $x ((x++)) เสร็จสิ้น

ลูปด้านบนจะพิมพ์ตัวเลขตั้งแต่ 0 ถึง 10 ยกเว้น 5 เพราะระหว่างการวนซ้ำของ x=5 มีคำสั่งต่อซึ่งจะข้ามส่วนที่เหลือของรหัสในลูปที่เริ่มต้นด้วยการวนซ้ำของ x=6.

การใช้ลูป: สคริปต์และบรรทัดคำสั่ง

ไวยากรณ์ลูปสามารถใช้ใน Bash shell โดยตรงหรือจากไฟล์เชลล์สคริปต์ที่เรียกทำงานได้ คล้ายกับ สำหรับ และ ในขณะที่ วนซ้ำเมื่อและ ในขณะที่ ไวยากรณ์ลูปถูกป้อนบนเชลล์ เชลล์ดำเนินการต่อพร้อมต์เพื่อให้ผู้ใช้ดำเนินการคำสั่งต่อเพื่อวนซ้ำ

หรือผู้ใช้สามารถบันทึกสิ่งนี้ในไฟล์สคริปต์และรันไฟล์สคริปต์

ดิ #!/bin/bash ที่จุดเริ่มต้นระบุล่ามที่จะใช้เมื่อไฟล์ถูกดำเนินการ แม้ว่า Bash จะเป็นเชลล์ที่ใช้กันมากที่สุดในปัจจุบัน ผู้ใช้บางคนชอบเชลล์เช่น zshซึ่งควรระบุแทน bash ที่จุดเริ่มต้นของไฟล์นี้

เพื่อให้สิทธิ์ในการดำเนินการ สำหรับไฟล์นี้ ให้รัน:

chmod +x test.sh

ในที่สุด, เพื่อรันไฟล์, วิ่ง:

./test.sh

บทสรุป

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