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