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