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

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

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

บทนำ

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

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

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

สำหรับในการทำ ... ... ทำเสร็จแล้ว

ที่นี่ เป็นตัวแปร Bash ซึ่งต้องเป็นชื่อตัวแปรเชลล์ Linux ที่ถูกต้อง กล่าวคือ ชื่อประกอบด้วยตัวอักษร (az, AZ) ตัวเลข (0-9) และขีดล่าง ( _ ) และต้องขึ้นต้นด้วยตัวอักษรหรือ ขีดล่าง

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

คำสั่งใดที่จะดำเนินการต้องอยู่ใน ทำ..เสร็จ บล็อก.

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

วนซ้ำในช่วงของค่าจำนวนเต็ม: รหัสต่อไปนี้สร้างไดเร็กทอรีชื่อ dir1, dir2, dir3 ไม่เกิน dir10

สำหรับฉันใน {1..10} do mkdir dir$i done

วนซ้ำรายการค่าคงที่: รหัสต่อไปนี้พิมพ์แต่ละสตริงหรือจำนวนเต็มในรายการคงที่ที่กำหนด

สำหรับฉันใน Hello 1 2 3 Bye! ทำ echo $i เสร็จแล้ว

วนรอบเอาต์พุตของคำสั่ง: รหัสต่อไปนี้วนรอบผลลัพธ์ของ ลส และพิมพ์ชื่อของแต่ละไฟล์ในรูปแบบที่กำหนด

สำหรับฉันใน `ls` do echo "ชื่อไฟล์คือ $i" เสร็จแล้ว

ไวยากรณ์ที่ใช้นิพจน์

ไวยากรณ์ที่ใช้นิพจน์คล้ายกับภาษาการเขียนโปรแกรม C ก็เป็นไปได้ใน Bash:

สำหรับ ((นิพจน์ 1; นิพจน์ 2; นิพจน์ 3)) ทำ ... ... เสร็จสิ้น

ที่นี่, นิพจน์ 1 คือการเริ่มต้นของตัวแปรดัชนี นิพจน์2 เป็นเงื่อนไขเมื่อต้องออกจากลูป เงื่อนไขนี้ได้รับการตรวจสอบในการทำซ้ำแต่ละครั้ง นิพจน์ 3 ระบุการเพิ่ม/ลด/ปรับเปลี่ยนในค่าของตัวแปรดัชนี

ตัวอย่างต่อไปนี้จะพิมพ์ค่าตั้งแต่ 0 ถึง 4:

สำหรับ ((i=0;i<5;i++)) ทำ echo $i done

ตัวอย่างต่อไปนี้สร้างการวนซ้ำที่ไม่สิ้นสุด เนื่องจากไม่มีการระบุนิพจน์:

สำหรับ (( ; ; )) do echo "กด Ctrl-C เพื่อหยุด" done

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

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

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

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] แล้วทำอย่างอื่น echo $i; เสร็จแล้ว

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

สำหรับไฟล์ใน `ls` do flen=`wc -c $file` ถ้า [[ "$flen" = "0 $file" ]] แล้ว echo "$file is empty" แตกเป็นอย่างอื่น echo $flen fi เสร็จแล้ว 

คำสั่ง wc -c พิมพ์จำนวนบรรทัดในไฟล์ . มันพิมพ์ในรูปแบบ , ตัวอย่างเช่น, 10 test.txt. เรากำลังหลุดจากลูปเมื่อจำนวนบรรทัดเป็น 0 นั่นคือไฟล์ว่างเปล่า

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

คล้ายกับ C และภาษาโปรแกรมอื่น ๆ อีกมากมาย bash ยังมี a ดำเนินต่อ คำสั่ง เพื่อข้ามส่วนที่เหลือของการวนซ้ำในลูปหากเป็นไปตามเงื่อนไขเฉพาะ

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] จากนั้นทำต่อ fi echo $i; เสร็จแล้ว

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

ในตัวอย่างต่อไปนี้ เราพิมพ์จำนวนบรรทัดในไฟล์ และการทำซ้ำเฉพาะจะ ดำเนินต่อ ถ้าเป็นไดเร็กทอรีและไม่ใช่ไฟล์

สำหรับไฟล์ใน `ls` do if [[ -d $file ]] จากนั้นทำต่อ fi wc -c "$file" เสร็จแล้ว

[[ -d $ไฟล์ ]] ตรวจสอบว่าไฟล์นั้นเป็นไดเร็กทอรีหรือไม่ ถ้าใช่ เราจะข้ามไปยังไฟล์ถัดไป นั่นคือ การวนซ้ำถัดไป หากไม่ใช่ไดเร็กทอรี เราพิมพ์จำนวนบรรทัดในไฟล์โดยใช้ ห้องน้ำ คำสั่งดังที่แสดงไว้ก่อนหน้านี้เช่นกัน

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

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

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

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

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

chmod +x test.sh

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

./test.sh

บทสรุป

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