Bash: for loop


พื้นฐานการใช้ลูปใน Bash Scripting

การใช้ ลูป (loop) ใน Bash script เป็นหนึ่งในเครื่องมือสำคัญที่ช่วยให้เราสามารถทำงานซ้ำ ๆ ได้อย่างมีประสิทธิภาพ ภาพด้านบนสรุปรูปแบบการใช้ลูปต่าง ๆ ที่นิยมใช้ใน Bash เอาไว้อย่างครบถ้วน เรามาดูความหมายและการใช้งานของแต่ละแบบกัน

Bash for loop

for i in /etc/*; do
  echo $i
done

ใช้สำหรับวนลูปผ่านรายการ เช่น รายการไฟล์ในไดเรกทอรี หรือคำที่อยู่ในลิสต์ โดยตัวแปร $i จะเก็บค่าแต่ละรายการในแต่ละรอบ

C-like for loop

for ((i = 0; i < 100; i++)); do
  echo $i
done

เขียนในสไตล์ของภาษา C ซึ่งเหมาะกับการนับเลขที่ต้องการระบุจุดเริ่มต้น เงื่อนไข และวิธีเพิ่มค่า

For loop แบบช่วง (Range)

for i in {1..10}; do
  echo "Number: $i"
done

ใช้สำหรับวนค่าจากตัวเลขหนึ่งไปยังอีกตัวเลขหนึ่ง และสามารถกำหนด step ได้ด้วย เช่น {5..50..5}

While loop

i=1
while [[ $i -lt 4 ]]; do
  echo "Number: $i"
  ((i++))
done

วนลูปตราบใดที่เงื่อนไขยังเป็นจริง เหมาะกับกรณีที่ไม่รู้จำนวนรอบที่แน่นอน

While true loop

while true; do
  # ทำงานตลอดไป
done

หรือเขียนแบบ shorthand:

while :; do
  # ทำงานตลอดไป
done

มักใช้ร่วมกับคำสั่ง break เพื่อจบลูปเมื่อถึงเงื่อนไขที่ต้องการ

อ่านไฟล์แบบบรรทัดต่อบรรทัด

cat file.txt | while read line; do
  echo $line
done

หรือใช้อีกแบบหนึ่ง:

while read line; do
  echo $line
done < "/path/to/txt/file"

เหมาะสำหรับประมวลผลไฟล์ทีละบรรทัด

คำสั่ง continue

for number in $(seq 1 3); do
  if [[ $number == 2 ]]; then
    continue
  fi
  echo "$number"
done

ข้ามรอบปัจจุบันของลูปและเริ่มรอบถัดไปทันที

คำสั่ง break

for number in $(seq 1 3); do
  if [[ $number == 2 ]]; then
    break
  fi
  echo "$number"
done

หยุดลูปทันทีเมื่อเงื่อนไขเป็นจริง

Until loop

count=0
until [[ $count -gt 10 ]]; do
  echo "$count"
  ((count++))
done

หรือใช้เพื่อลดค่า:

count=10
until [[ $count -eq 0 ]]; do
  echo "$count"
  ((count--))
done

ลูปจะทำงาน จนกว่าเงื่อนไขจะเป็นจริง