คำสั่ง for loop เป็นเครื่องมือที่มีประโยชน์เมื่อเขียน Bash script เพื่อทำซ้ำงานกับไฟล์หลายไฟล์ บันทึกหรือค่าต่างๆ
คำสั่ง for จะวนลูปผ่านรายการค่าต่างๆ ดำเนินการกับแต่ละรายการจนกว่าจะประมวลผลครบทุกอย่าง
กรณีการใช้งานรวมถึงการวนลูปผ่านไฟล์ในไดเรกทอรี บรรทัดในไฟล์ข้อความ หรือผลลัพธ์จากคำสั่งฐานข้อมูล
ไวยากรณ์ Bash For Loop
for VARIABLE in LIST do COMMANDS done
โดยที่:
- VARIABLE คือชื่อตัวแปรที่จะกำหนดค่าให้กับแต่ละรายการใน LIST เมื่อถูกประมวลผลโดย COMMANDS
- LIST สามารถเป็นรูปแบบต่างๆ ได้ ดูตัวอย่างด้านล่าง
ตัวอย่าง Bash For Loop
for loops สามารถวนลูปผ่านรายการที่กำหนดไว้ล่วงหน้า หรือรายการที่สร้างจากผลลัพธ์ของสคริปต์หรือแอปพลิเคชันบรรทัดคำสั่งอื่นๆ
วนลูปผ่านช่วงตัวเลขด้วย for Loop
ประมวลผลตัวเลขแต่ละตัวในช่วง (เพิ่มทีละ 1) โดยใช้ {START…END}:
for num in {0..10} do echo "I'm counting to 10 and I'm up to $num" done
โปรดทราบว่า:
- แต่ละรายการในลิสต์จะได้รับชื่อตัวแปรว่า num.
- เข้าถึงได้ภายหลังในสคริปต์โดยใช้ $num.
- การวนลูปช่วงตัวเลขรองรับได้ใน Bash เวอร์ชัน 3 ขึ้นไป.
- ตัวเลขที่จะวนลูปเริ่มจากตัวเลขแรกในวงเล็บปีกกา และสิ้นสุดที่ตัวเลขสุดท้าย โดยเพิ่มทีละ 1
Stepping (ข้าม) ตัวเลขและเพิ่มทีละ 3 – เพื่อประมวลผลเฉพาะตัวคูณของ 3 – โดยใช้ {START…END…INCREMENT}:
for num in {0..15..3} do echo "$num is a multiple of 3!" done
โปรดทราบว่า:
- มีตัวเลขที่สามเพิ่มเข้าไปในนิพจน์ในวงเล็บปีกกา.
- จะทำงานกับตัวเลข 0 ถึง 15 โดยเพิ่มทีละ 3
- การวนลูปช่วงพร้อมระยะเพิ่มแบบกำหนดเองรองรับได้ใน Bash เวอร์ชัน 4 ขึ้นไป.
วนลูปผ่านรายการสตริงด้วย for Loop
คุณยังสามารถวนลูปผ่านรายการค่าสตริงได้:
for car in Ford, Holden, Honda, BMW, Ferrari do echo "I wish I could drive a $car" done
วนลูปผ่านอาร์เรย์ด้วย for Loop
อาร์เรย์สามารถประกาศเป็นตัวแปรก่อนแล้วค่อยวนลูปผ่านค่าในมัน:
FRUITS=('Apple' 'Pear' 'Orange' 'Strawberry') for fruit in "${FRUITS[@]}" do echo "$fruit is delicious" done
วนลูปผ่านไฟล์ (และผลลัพธ์อื่นๆ) ด้วย for Loop
คุณยังสามารถวนลูปผ่านผลลัพธ์ของคำสั่งบรรทัดคำสั่งอื่นๆ ได้:
for f in * do echo "Filename is $f" done
Break
คำสั่ง break จะออกจากลูป ณ จุดที่กำหนด:
for num in {0..15..3} do echo "$num is a multiple of 3!" if [[ "$num" == '9' ]] then break fi done echo 'Finished counting at 9!'
Continue
คำสั่ง continue จะหยุดการทำงานของโค้ดในรอบลูปปัจจุบัน (ข้ามไปเลย) และ continue ไปรอบถัดไป:
for num in {0..15..3} do if [[ "$num" == '6' ]] then continue fi echo "$num is a multiple of 3!" done echo 'The number 6 was skipped!'
สรุป
การใช้ลูปขณะเขียนสคริปต์จะช่วยประหยัดเวลาและทำให้คุณเขียนสคริปต์ที่ยืดหยุ่นได้ ซึ่งสามารถทำให้การประมวลผลไฟล์และข้อมูลเป็นอัตโนมัติโดยไม่ต้องป้อนข้อมูลด้วยมือ
ดูบทความอื่นๆ ของเราสำหรับเคล็ดลับ Bash scripting เพิ่มเติม!