Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญ Bash For Loop: 12 ตัวอย่างจำเป็นสำหรับ Linux Shell Scripting

Bash For Loop มี 2 รูปแบบ: 1) ใช้คำสั่ง in กับรายการค่า 2) ไวยากรณ์แบบ C programming

รูปแบบที่ 1: ใช้ in และรายการค่า

for varname in list
do
  command1
  command2
  ...
done
  • for, in, do, done เป็นคีย์เวิร์ด
  • list = รายการค่าคั่นด้วย space (หรือตัวแปรที่เก็บค่าหลายค่า) หากไม่ระบุจะใช้ positional parameters
  • varname = ตัวแปร Bash ใดๆ

Loop ทำงาน 1 รอบต่อ 1 ค่าใน list ค่าปัจจุบันเก็บไว้ใน varname

รูปแบบที่ 2: ไวยากรณ์แบบ C

for (( expr1; expr2; expr3 ))
do
  command1
  command2
  ...
done
  • expr1: initialization (รันครั้งแรกก่อน loop)
  • expr2: condition (loop ตราบใดที่ TRUE)
  • expr3: update (รันทุกครั้งหลังจบรอบ)

12 ตัวอย่างการใช้งาน

1. ค่าคงที่หลัง in

$ cat for1.sh
i=1
for day in Mon Tue Wed Thu Fri
do
  echo "Weekday $((i++)) : $day"
done
$ ./for1.sh
Weekday 1 : Mon
Weekday 2 : Tue
Weekday 3 : Wed
Weekday 4 : Thu
Weekday 5 : Fri

ระวัง: อย่าใช้คอมมา (Mon, Tue) จะถือเป็นส่วนหนึ่งของค่า

ระวัง: อย่ารับรายการใน double quotes ("Mon Tue Wed") จะถือเป็นค่าเดียว

2. ใช้ตัวแปรเป็นรายการ

$ cat for2.sh
i=1
weekdays="Mon Tue Wed Thu Fri"
for day in $weekdays
do
  echo "Weekday $((i++)) : $day"
done

Best Practice: ปกติควร quote ตัวแปร แต่ ใน for loop ห้าม quote ไม่งั้นจะกลายเป็นค่าเดียว

3. ไม่ระบุลิสต์ ใช้ Positional Parameters

$ cat for3.sh
i=1
for day
do
  echo "Weekday $((i++)) : $day"
done
$ ./for3.sh Mon Tue Wed Thu Fri

ระวัง: อย่าเขียน for day in (มี in แต่ไม่มีค่า) จะไม่เข้าลูปเลย

4. ใช้ Output ของคำสั่ง Unix เป็นลิสต์

$ cat for4.sh
i=1
for username in `awk -F: '{print $1}' /etc/passwd`
do
  echo "Username $((i++)) : $username"
done

5. Loop ไฟล์และไดเรกทอรี

$ cat for5.sh
i=1
cd ~
for item in *
do
  echo "Item $((i++)) : $item"
done

ใช้งาน * คล้าย file globbing ปกติ สามารถใช้ pattern ได้ เช่น /etc/[abcd]*.conf

6. ออกจาก Loop ด้วย break

$ cat for6.sh
i=1
for day in Mon Tue Wed Thu Fri
do
  echo "Weekday $((i++)) : $day"
  if [ $i -eq 3 ]; then break; fi
done

7. ข้ามรอบปัจจุบันด้วย continue

$ cat for7.sh
i=1
for day in Mon Tue Wed Thu Fri Sat Sun
do
  echo -n "Day $((i++)) : $day"
  if [ $i -eq 7 -o $i -eq 8 ]; then
    echo " (WEEKEND)"
    continue
  fi
  echo " (weekday)"
done

8. C-style For Loop

$ cat for8.sh
for (( i=1; i <= 5; i++ ))
do
  echo "Random number $i: $RANDOM"
done

9. Infinite Loop

$ cat for9.sh
i=1
for (( ; ; ))
do
  sleep $i
  echo "Number: $((i++))"
done

กด Ctrl+C เพื่อหยุด

10. ใช้ Comma ใน C-style Loop

$ cat for10.sh
for ((i=1, j=10; i <= 5; i++, j=j+5))
do
  echo "Number $i: $j"
done

11. Range ด้วย Brace Expansion

$ cat for11.sh
for num in {1..10}
do
  echo "Number: $num"
done

12. Range พร้อม Increment

$ cat for12.sh
for num in {1..10..2}
do
  echo "Number: $num"
done
# Output: 1, 3, 5, 7, 9

Tip: บุ๊กมาร์กบทความนี้ไว้อ้างอิงครับ!