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ả
Điều Kiện trong Bash – Xử Lý Logic Cơ Bản trong DevOps
Sau khi nắm được cách viết script cơ bản và dùng biến trong Bash (bài 1), giờ là lúc làm cho script của bạn “thông minh” hơn. Điều kiện – như if else Bash – là cách để Bash quyết định làm gì dựa trên tình huống. Trong bài thứ hai của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách dùng điều kiện trong Bash DevOps, từ test command Bash, cách xây dựng logic Bash, đến thực hành script thực tế. Đây là những gì tôi dùng hàng ngày để tự động hóa trong DevOps, không phải chỉ để khoe lý thuyết đâu nhé!
Điều Kiện trong Bash Là Gì?
Logic Cơ Bản với Bash
Điều kiện cho phép script kiểm tra trạng thái và phản hồi phù hợp:
- Disk đầy → gửi cảnh báo.
- Service chạy → bỏ qua, không chạy → khởi động.
Ví dụ: Thay vì chỉ in % disk usage (bài 1), script có thể cảnh báo nếu vượt 80%.
Tại Sao Quan Trọng trong DevOps?
- Tự động hóa thông minh: Quyết định dựa trên dữ liệu (VD: chỉ deploy nếu test pass).
- Giám sát: Kiểm tra hệ thống và hành động ngay (VD: restart server khi CPU cao).
- Tiết kiệm thời gian: Loại bỏ kiểm tra thủ công.
Thực tế: Tôi từng viết script kiểm tra disk, gửi email khi đầy – nhờ điều kiện, nó cứu server khỏi crash lúc 2 giờ sáng.
Cách Dùng Điều Kiện trong Bash
Câu Lệnh If/Else
Cú pháp cơ bản:
if [ điều_kiện ]; then
# Làm gì nếu đúng
else
# Làm gì nếu sai
fi
[ ]
: Test command, kiểm tra điều kiện.then
: Thực thi nếu điều kiện đúng.fi
: Kết thúc khối if.
Ví dụ:
DISK=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1)
if [ $DISK -gt 80 ]; then
echo "Cảnh báo: Disk usage vượt 80% ($DISK%)"
else
echo "Disk ổn: $DISK%"
fi
Test Command Bash
[ ]
hỗ trợ nhiều loại kiểm tra:
-
So sánh số:
-gt
: Greater than (lớn hơn).-lt
: Less than (nhỏ hơn).-eq
: Equal (bằng).if [ 5 -gt 3 ]; then echo "5 lớn hơn 3" fi
-
So sánh string:
=
: Bằng.!=
: Không bằng.NAME="DevOps" if [ "$NAME" = "DevOps" ]; then echo "Xin chào DevOps!" fi
-
Kiểm tra file:
-e
: File tồn tại.-f
: Là file thường.-d
: Là thư mục.if [ -d "/tmp" ]; then echo "Thư mục /tmp tồn tại" fi
Tips: Luôn để biến trong " "
(VD: "$NAME"
) để tránh lỗi khi biến rỗng.
Nhiều Điều Kiện
- AND (
&&
):if [ $DISK -gt 80 ] && [ $CPU -gt 90 ]; then echo "Cả disk và CPU đều cao!" fi
- OR (
||
):if [ $DISK -gt 80 ] || [ $CPU -gt 90 ]; then echo "Disk hoặc CPU cao!" fi
Thực Hành: Script Kiểm Tra Hệ Thống Thông Minh
Script Nâng Cấp từ Bài 1
Tạo smart_check.sh
:
#!/bin/bash
# Biến
HOST=$(hostname)
DISK=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1)
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
# Kiểm tra disk
if [ $DISK -gt 80 ]; then
echo "Cảnh báo: Disk usage trên $HOST vượt $DISK% (ngưỡng 80%)"
else
echo "Disk trên $HOST ổn: $DISK%"
fi
# Kiểm tra CPU
if [ $(echo "$CPU > 90" | bc) -eq 1 ]; then
echo "Cảnh báo: CPU usage trên $HOST vượt $CPU% (ngưỡng 90%)"
else
echo "CPU trên $HOST ổn: $CPU%"
fi
# Kiểm tra file log tồn tại
LOG_FILE="/var/log/syslog"
if [ -f "$LOG_FILE" ]; then
echo "File log $LOG_FILE tồn tại"
else
echo "Không tìm thấy $LOG_FILE"
fi
Chạy và Test
chmod +x smart_check.sh
./smart_check.sh
- Kết quả mẫu:
Disk trên my-server ổn: 42% CPU trên my-server ổn: 15.3% File log /var/log/syslog tồn tại
Giải thích:
$DISK -gt 80
: So sánh disk với 80%.$(echo "$CPU > 90" | bc)
: So sánh số thực (vì$CPU
là float).-f "$LOG_FILE"
: Kiểm tra file log.
DevOps: Script này có thể dùng để giám sát server, thêm cron để chạy định kỳ.
Debug Điều Kiện
- Thêm
-x
để debug:bash -x smart_check.sh
- Nếu lỗi so sánh: Đảm bảo biến không rỗng (dùng
"$DISK"
thay vì$DISK
).
Thực tế: Tôi từng quên " "
quanh biến, script báo lỗi – từ đó luôn cẩn thận hơn.
Ứng Dụng trong DevOps
Tự Động Hóa Quyết Định
- Kiểm tra trước deploy:
DISK=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1) if [ $DISK -lt 90 ]; then echo "Disk đủ chỗ, bắt đầu deploy..." else echo "Disk gần đầy, hoãn deploy!" exit 1 fi
Pipeline CI/CD
- Trong
.gitlab-ci.yml
:check_system: script: - bash smart_check.sh - if [ $(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1) -gt 90 ]; then exit 1; fi
Case study: Một team dùng script kiểm tra CPU trước khi chạy test nặng, tránh làm crash runner CI.
Kết Luận
Điều kiện trong Bash DevOps giúp script của bạn thông minh hơn với if else Bash, test command Bash, và logic Bash. Thực hành với smart_check.sh
cho thấy bạn có thể kiểm tra và phản hồi dựa trên trạng thái hệ thống – bước đầu cho tự động hóa thực tế. Bài tiếp theo, chúng ta sẽ khám phá Vòng Lặp trong Bash – cách xử lý công việc lặp lại như pro.