Bash 'จนถึง' ลูป: บทช่วยสอนและตัวอย่าง

ใช้ 'จนถึง' วนซ้ำในสคริปต์ทุบตีเพื่อวนซ้ำคำสั่ง

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

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

บทนำ

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

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

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

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

จนเสร็จ

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

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

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

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

x=0 จนกระทั่ง [[ $x -eq 10 ]] ทำ echo $x ((x++)) เสร็จสิ้น

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

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

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

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

z=0 จนกระทั่ง echo "Hi" echo "Bye" [[ $z -eq 5 ]] ทำ echo "กำลังสร้าง dir$z..." mkdir dir$z ((z++)) เสร็จสิ้น

คำสั่งแรก echo “Hi” และ echo “Bye” จะดำเนินการเพียงครั้งเดียวโดยสมบูรณ์ ความสำเร็จหรือความล้มเหลวไม่มีผลกระทบต่อระยะเวลาที่ลูปจะทำงาน

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

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

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

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

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

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

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

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

x=0 จนกว่า [[ $x -eq 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

บทสรุป

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