Danh sách bài viết trong series Bashscript từ cơ bản đến áp dụng vào DevOps
- Bài 1. Cơ Bản Bash Script trong DevOps
- Bài 2. Điều Kiện trong Bash DevOps: Xử Lý Logic Cơ Bản
- Bài 3. Vòng Lặp trong Bash DevOps: Tự Động Hóa Lặp Lại Hiệu Quả
- Bài 4. Xử Lý File trong Bash DevOps: Đọc, Ghi và Quản Lý Hiệu Quả
- Bài 5. Text Processing trong Bash DevOps: Grep, Awk, Sed Hiệu Quả
- Bài 6. Function trong Bash DevOps: Tái Sử Dụng Code Hiệu Quả
- Bài 7. Quản Lý Biến và Môi Trường trong Bash DevOps
- Bài 8. Cron Job trong Bash DevOps: Tự Động Hóa Theo Lịch Hiệu Quả
- Bài 9. Debug trong Bash DevOps: Tìm và Sửa Lỗi Hiệu Quả
- Bài 10. Error Handling Bash DevOps: Xử Lý Ngoại Lệ Hiệu Quả
- Bài 11. Bash trong CI/CD DevOps: Tích Hợp Pipeline Hiệu Quả
- Bài 12. Quản Lý Hệ Thống với Bash DevOps: Theo Dõi và Can Thiệp Hiệu Quả
- Bài 13. Tự Động Hóa SSH với Bash DevOps: Quản Lý Multi-Server Hiệu Quả
- Bài 14. Bash và Docker trong DevOps: Quản Lý Container Hiệu Quả
- Bài 15. Monitoring với Bash DevOps: Báo Cáo Hệ Thống Hiệu Quả
- Bài 16. Bash Nâng Cao: Parallel Execution trong DevOps Hiệu Quả
- Bài 17. Bash và API trong DevOps: Gọi và Xử Lý API Hiệu Quả
- Bài 18. Bash và Cloud CLI trong DevOps: Quản Lý Cloud Hiệu Quả
- Bài 19. Bash và Security trong DevOps: Bảo Mật Script Hiệu Quả
- Bài 20. Best Practice trong Bash DevOps: Làm Chủ Script Hiệu Quả
Vòng Lặp trong Bash – Tự Động Hóa Lặp Lại trong DevOps
Sau khi biết cách dùng biến (bài 1) và thêm logic với điều kiện (bài 2), giờ là lúc làm cho script Bash của bạn mạnh mẽ hơn với vòng lặp trong Bash DevOps. Vòng lặp giúp bạn tự động hóa những công việc lặp đi lặp lại – như kiểm tra nhiều server, xử lý danh sách file, hay chạy lệnh nhiều lần. Trong bài thứ ba của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua for loop Bash, while loop Bash, và thực hành tự động hóa Bash thực tế. Đây là kinh nghiệm tôi rút ra từ việc quản lý hệ thống, không chỉ là lý thuyết suông đâu nhé!
Vòng Lặp trong Bash Là Gì?
Tự Động Hóa Lặp Lại
Vòng lặp cho phép chạy một khối lệnh nhiều lần dựa trên danh sách hoặc điều kiện:
- Kiểm tra disk trên 10 server thay vì gõ lệnh từng cái.
- Xử lý tất cả file log trong thư mục mà không cần viết lại code.
Ví dụ: Thay vì chạy df -h
5 lần cho 5 thư mục, vòng lặp làm điều đó trong 1 script.
Tại Sao Quan Trọng trong DevOps?
- Tiết kiệm thời gian: Tự động hóa task lặp (VD: cập nhật nhiều server).
- Scale: Quản lý hệ thống lớn dễ dàng (VD: kiểm tra hàng loạt container).
- Pipeline: Xử lý batch job trong CI/CD.
Thực tế: Tôi từng dùng vòng lặp để kiểm tra CPU trên 20 server, phát hiện 1 máy bất thường trong 1 phút – thủ công thì mất cả buổi.
Các Loại Vòng Lặp trong Bash
For Loop Bash
Dùng để lặp qua danh sách hoặc phạm vi.
-
Lặp qua danh sách:
for ITEM in "apple" "banana" "orange" do echo "Fruit: $ITEM" done
- Kết quả:
Fruit: apple Fruit: banana Fruit: orange
- Kết quả:
-
Lặp qua phạm vi số:
for i in {1..3} do echo "Số: $i" done
-
Lặp qua output lệnh:
for FILE in $(ls *.txt) do echo "File: $FILE" done
Tips: {1..3}
là cú pháp Bash 4+, nếu dùng Bash cũ, thay bằng seq 1 3
.
While Loop Bash
Lặp khi điều kiện đúng.
COUNT=1
while [ $COUNT -le 5 ]
do
echo "Đếm: $COUNT"
COUNT=$((COUNT + 1))
done
- Kết quả: In từ 1 đến 5.
Tips: Dùng $(( ))
để tính toán số học.
Until Loop
Lặp cho đến khi điều kiện đúng (ngược với while).
COUNT=1
until [ $COUNT -gt 5 ]
do
echo "Đếm: $COUNT"
COUNT=$((COUNT + 1))
done
DevOps: While kiểm tra trạng thái liên tục (VD: đợi service chạy), for xử lý danh sách cố định (VD: list server).
Thực Hành: Script Kiểm Tra Nhiều Server
Script với For Loop
Tạo check_servers.sh
để kiểm tra disk trên nhiều server:
#!/bin/bash
# Danh sách server (thay bằng IP thật khi dùng SSH - bài 13)
SERVERS="server1 server2 server3"
for SERVER in $SERVERS
do
echo "Kiểm tra $SERVER..."
# Giả lập disk usage (thay bằng SSH thực tế sau)
DISK=$((RANDOM % 100)) # Số ngẫu nhiên 0-99
if [ $DISK -gt 80 ]; then
echo "Cảnh báo: Disk trên $SERVER vượt $DISK% (ngưỡng 80%)"
else
echo "Disk trên $SERVER ổn: $DISK%"
fi
done
Script với While Loop
Tạo wait_service.sh
để đợi service chạy:
#!/bin/bash
# Giả lập kiểm tra service (thay bằng lệnh thực tế như 'systemctl')
COUNT=0
MAX_WAIT=10
while [ $COUNT -lt $MAX_WAIT ]
do
if [ $((RANDOM % 2)) -eq 1 ]; then # Giả lập service chạy
echo "Service đã chạy sau $COUNT giây!"
exit 0
fi
echo "Đợi service... ($COUNT/$MAX_WAIT)"
COUNT=$((COUNT + 1))
sleep 1
done
echo "Timeout: Service không chạy sau $MAX_WAIT giây"
exit 1
Chạy và Test
-
For loop:
chmod +x check_servers.sh ./check_servers.sh
- Kết quả mẫu:
Kiểm tra server1... Disk trên server1 ổn: 45% Kiểm tra server2... Cảnh báo: Disk trên server2 vượt 92% (ngưỡng 80%) Kiểm tra server3... Disk trên server3 ổn: 67%
- Kết quả mẫu:
-
While loop:
chmod +x wait_service.sh ./wait_service.sh
- Kết quả: Chờ ngẫu nhiên, thoát khi “service chạy” hoặc timeout.
DevOps: check_servers.sh
có thể mở rộng với SSH (bài 13), wait_service.sh
dùng trong pipeline để đợi DB.
Debug Vòng Lặp
- Thêm
-x
:bash -x check_servers.sh
- Kiểm tra biến trong vòng lặp:
echo "Debug: SERVER=$SERVER, DISK=$DISK"
Thực tế: Tôi từng quên tăng $COUNT
trong while, vòng lặp chạy vô tận – -x
cứu tôi khỏi debug mò mẫm.
Ứng Dụng trong DevOps
Tự Động Hóa Danh Sách
- Kiểm tra file log:
for LOG in /var/log/*.log do if [ -f "$LOG" ]; then echo "Xử lý $LOG..." fi done
Pipeline CI/CD
- Đợi job hoàn thành:
wait_job: script: - bash wait_service.sh
Case study: Một team dùng for loop để kiểm tra 50 container cùng lúc, phát hiện lỗi trong 2 phút thay vì kiểm thủ công cả giờ.
Kết Luận
Vòng lặp trong Bash DevOps là công cụ mạnh mẽ để tự động hóa Bash với for loop Bash và while loop Bash. Thực hành với check_servers.sh
và wait_service.sh
cho thấy bạn có thể xử lý công việc lặp lại hiệu quả – bước tiến lớn trong tự động hóa. Bài tiếp theo, chúng ta sẽ khám phá Xử Lý File trong Bash – cách đọc, ghi, và quản lý dữ liệu như pro.