Bài 2. Điều Kiện trong Bash DevOps: Xử Lý Logic Cơ Bản

Đ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:

  1. 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
  2. So sánh string:

    • =: Bằng.
    • !=: Không bằng.
      NAME="DevOps"
      if [ "$NAME" = "DevOps" ]; then
      echo "Xin chào DevOps!"
      fi
  3. 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.

Điều hướng chuỗi bài viết<< Bài 1. Cơ Bản Bash Script trong DevOps
>> Bài 3. Vòng Lặp trong Bash DevOps: Tự Động Hóa Lặp Lại Hiệu Quả
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận