Android

Bash for loop

Shell Scripting - For Loops

Shell Scripting - For Loops

สารบัญ:

Anonim

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

ในภาษาสคริปต์เช่น Bash ลูปจะมีประโยชน์สำหรับการทำงานซ้ำ ๆ โดยอัตโนมัติ

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

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

Bash มาตรฐานสำหรับวนรอบ

สำหรับวนซ้ำทุกรายการและดำเนินการชุดคำสั่งที่กำหนด

Bash for loop ใช้แบบฟอร์มต่อไปนี้:

for item in do done

รายการสามารถเป็นชุดของสตริงที่คั่นด้วยช่องว่างช่วงของตัวเลขเอาต์พุตของคำสั่งอาร์เรย์และอื่น ๆ

วนรอบสตริง

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

for element in Hydrogen Helium Lithium Beryllium do echo "Element: $element" done

ลูปจะสร้างเอาต์พุตต่อไปนี้:

Element: Hydrogen Element: Helium Element: Lithium Element: Beryllium

วนรอบช่วงตัวเลข

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

{START..END}

ในตัวอย่างด้านล่างการวนซ้ำจะวนซ้ำตัวเลขทั้งหมดตั้งแต่ 0 ถึง 3

for i in {0..3} do echo "Number: $i" done

Number: 0 Number: 1 Number: 2 Number: 3

เริ่มต้นจาก Bash 4 เป็นไปได้ที่จะระบุการเพิ่มเมื่อใช้ช่วง การแสดงออกใช้แบบฟอร์มต่อไปนี้:

{START..END..INCREMENT}

for i in {0..20..5} do echo "Number: $i" done

Number: 0 Number: 5 Number: 10 Number: 15 Number: 20

วนรอบองค์ประกอบของอาร์เรย์

นอกจากนี้คุณยังสามารถใช้ for เพื่อวนซ้ำองค์ประกอบต่างๆ:

ในตัวอย่างด้านล่างเราจะกำหนดอาร์เรย์ BOOKS และวนซ้ำองค์ประกอบของอาร์เรย์

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby') for book in "${BOOKS}"; do echo "Book: $book" done

Book: In Search of Lost Time Book: Don Quixote Book: Ulysses Book: The Great Gatsby

Bash สไตล์ C สำหรับลูป

ไวยากรณ์ของ C-style สำหรับลูปกำลังใช้รูปแบบต่อไปนี้:

for ((INITIALIZATION; TEST; STEP)) do done

ส่วน INITIALIZATION จะดำเนินการเพียงครั้งเดียวเมื่อวงเริ่ม จากนั้นจะทำการประเมินส่วนของการ TEST หากเป็นเท็จการ for loop จะถูกยกเลิก หากการ TEST เป็นจริงคำสั่งภายในเนื้อความของสำหรับลูปจะถูกดำเนินการและส่วนที่มีการปรับปรุง

ในรหัสต่อไปนี้วงดาวโดยเริ่มต้น i = 0 จากนั้นก่อนการตรวจสอบซ้ำแต่ละครั้งถ้า i ≤ 10 หากเป็นจริงมันพิมพ์ค่าปัจจุบันของ i และ i ด้วย 1 ( i++ ) มิฉะนั้นการวนซ้ำจะสิ้นสุดลง

for ((i = 0; i <= 1000; i++)); do echo "Counter: $i" done

ลูปจะวนซ้ำ 1001 ครั้งและสร้างเอาต์พุตต่อไปนี้:

Counter: 0 Counter: 1 Counter: 2… Counter: 998 Counter: 999 Counter: 1000

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

สามารถใช้คำสั่ง break และ continue เพื่อควบคุมการดำเนินการลูป

งบแบ่ง

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

ในตัวอย่างต่อไปนี้เราใช้คำสั่ง if เพื่อยุติการดำเนินการของลูปเมื่อรายการที่ทำซ้ำในปัจจุบันมีค่าเท่ากับ 'ลิเธียม'

for element in Hydrogen Helium Lithium Beryllium; do if]; then break fi echo "Element: $element" done echo 'All Done!'

Element: Hydrogen Element: Helium All Done!

ดำเนินการต่องบ

คำสั่ง continue ออกจากการวนซ้ำปัจจุบันของลูปและส่งการควบคุมโปรแกรมไปที่การวนซ้ำครั้งถัดไปของลูป

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

for i in {1..5}; do if]; then continue fi echo "Number: $i" done

Number: 1 Number: 3 Number: 4 Number: 5

Bash สำหรับตัวอย่างลูป

การเปลี่ยนชื่อไฟล์ด้วยช่องว่างในชื่อไฟล์

ตัวอย่างต่อไปนี้แสดงวิธีใช้ Bash สำหรับการวนซ้ำเพื่อเปลี่ยนชื่อไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันด้วยช่องว่างในชื่อโดยแทนที่ช่องว่างเป็นขีดล่าง

for file in *\ *; do mv "$file" "${file// /_}" done

มาแยกย่อยบรรทัดโค้ดทีละบรรทัด:

  • บรรทัดแรกสร้างห่วงสำหรับและวนซ้ำรายการของไฟล์ทั้งหมดที่มีช่องว่างในชื่อ นิพจน์ *\ * สร้างรายการบรรทัดที่สองใช้กับแต่ละไอเท็มของรายการและย้ายไฟล์ไปที่อันใหม่แทนที่พื้นที่ด้วยเครื่องหมายขีดล่าง ( _ ) ส่วน ${file// /_} กำลังใช้การขยายพารามิเตอร์เชลล์เพื่อแทนที่รูปแบบภายในพารามิเตอร์ด้วยสตริง done ระบุถึงจุดสิ้นสุดของส่วนลูป

การเปลี่ยนนามสกุลไฟล์

ตัวอย่างต่อไปนี้แสดงวิธีใช้ Bash for loop เพื่อเปลี่ยนชื่อไฟล์ทั้งหมดที่ลงท้ายด้วย. jpeg ในไดเรกทอรีปัจจุบันโดยแทนที่นามสกุลไฟล์จาก. jpeg เป็น. jpg

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg" done

ลองวิเคราะห์โค้ดทีละบรรทัด:

  • บรรทัดแรกสร้างห่วงสำหรับวนซ้ำและทำซ้ำผ่านรายการของไฟล์ทั้งหมดที่ลงท้ายด้วย '.jpeg' บรรทัดที่สองจะใช้กับแต่ละรายการของรายการและย้ายไฟล์ไปยังไฟล์ใหม่แทนที่ '.jpeg' ด้วย '.jpg'. ${file%.jpeg} เพื่อลบส่วน '.jpeg' ออกจากชื่อไฟล์โดยใช้การขยายพารามิเตอร์ของเชลล์ done บ่งบอกถึงจุดสิ้นสุดของเซ็กเมนต์ลูป

ข้อสรุป

ถึงตอนนี้คุณควรมีความเข้าใจที่ดีเกี่ยวกับวิธีใช้ bash for loop เพื่อวนซ้ำตามรายการต่างๆ

bash loop terminal