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ả
Function trong Bash – Tái Sử Dụng Code trong DevOps
Khi script Bash của bạn bắt đầu dài ra – lặp lại code, khó bảo trì – đã đến lúc dùng function trong Bash DevOps. Hàm Bash giúp bạn tái sử dụng Bash, biến script thành script modular Bash, dễ đọc và quản lý hơn. Trong bài thứ sáu của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách viết và dùng function, kèm thực hành thực tế. Đây là cách tôi tổ chức script khi làm việc với hệ thống và pipeline, không chỉ là lý thuyết đâu nhé!
Function trong Bash Là Gì?
Hàm: Tái Sử Dụng Code
Function (hàm) là khối code bạn định nghĩa một lần, gọi lại nhiều lần – giống hàm trong ngôn ngữ lập trình khác.
- Không function: Lặp lại lệnh kiểm tra disk 5 lần trong script.
- Có function: Viết hàm kiểm tra disk, gọi khi cần.
Ví dụ: Thay vì copy-paste lệnh df -h
cho mỗi thư mục, bạn viết hàm check_disk
và gọi nó.
Tại Sao Quan Trọng trong DevOps?
- Tái sử dụng: Dùng lại code cho nhiều server, task.
- Dễ bảo trì: Sửa 1 chỗ thay vì 10 chỗ.
- Modular: Chia script thành module nhỏ, dễ đọc.
Thực tế: Tôi từng viết hàm kiểm tra CPU, tái dùng trong 3 script khác nhau – tiết kiệm cả giờ debug khi cần sửa.
Cách Dùng Function trong Bash
Định Nghĩa và Gọi Hàm
-
Cú pháp cơ bản:
function_name() { echo "Đây là hàm" }
- Gọi:
function_name
.
- Gọi:
-
Ví dụ đơn giản:
greet() { echo "Hello DevOps!" } greet greet
- Kết quả:
Hello DevOps! Hello DevOps!
- Kết quả:
Truyền Tham Số
Hàm nhận tham số qua $1
, $2
, v.v.
greet() {
echo "Hello, $1!"
}
greet "Alice"
greet "Bob"
- Kết quả:
Hello, Alice! Hello, Bob!
Return Giá Trị
Bash không có return
như ngôn ngữ khác, dùng echo
và lấy output.
add() {
echo $(( $1 + $2 ))
}
SUM=$(add 3 5)
echo "Tổng: $SUM"
- Kết quả: “Tổng: 8”.
Tips: Dùng $()
để gán output hàm vào biến.
Thực Hành: Script Kiểm Tra Hệ Thống với Function
Script Modular
Tạo system_check.sh
:
#!/bin/bash
# Hàm kiểm tra disk
check_disk() {
local DISK=$(df -h "$1" | tail -1 | awk '{print $5}' | cut -d'%' -f1)
if [ $DISK -gt 80 ]; then
echo "Cảnh báo: Disk $1 vượt $DISK% (ngưỡng 80%)"
else
echo "Disk $1 ổn: $DISK%"
fi
}
# Hàm kiểm tra CPU
check_cpu() {
local CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
if [ $(echo "$CPU > $1" | bc) -eq 1 ]; then
echo "Cảnh báo: CPU vượt $CPU% (ngưỡng $1%)"
else
echo "CPU ổn: $CPU%"
fi
}
# Hàm ghi log
log_result() {
local TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$TIMESTAMP] $1" >> "system_log.txt"
}
# Gọi hàm
check_disk "/"
check_cpu 90
log_result "Kiểm tra hoàn tất trên $(hostname)"
Chạy và Test
chmod +x system_check.sh
./system_check.sh
- Kết quả mẫu:
Disk / ổn: 42% CPU ổn: 15.3%
- Check file
system_log.txt
:[2025-03-13 10:00:00] Kiểm tra hoàn tất trên my-server
Giải thích:
check_disk
: Nhận tham số đường dẫn (VD:/
).check_cpu
: Nhận ngưỡng CPU làm tham số.log_result
: Ghi kết quả vào file (bài 4).local
: Giới hạn biến trong hàm, tránh xung đột.
DevOps: Script này có thể mở rộng để kiểm tra nhiều server hoặc tích hợp pipeline.
Debug Function
- Thêm debug trong hàm:
check_disk() { echo "Debug: Checking $1" >&2 local DISK=$(df -h "$1" | tail -1 | awk '{print $5}' | cut -d'%' -f1) echo "Debug: DISK=$DISK" >&2 # ... }
- Chạy với
-x
:bash -x system_check.sh
Thực tế: Tôi từng quên local
, biến bị ghi đè – debug với echo
giúp phát hiện nhanh.
Ứng Dụng trong DevOps
Tái Sử Dụng trong Script
- Script kiểm tra nhiều thư mục:
for DIR in "/" "/var" "/tmp" do check_disk "$DIR" done
Pipeline CI/CD
- Hàm kiểm tra điều kiện:
check_resources: script: - | check_cpu() { CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}') if [ $(echo "$CPU > 90" | bc) -eq 1 ]; then echo "CPU cao, thoát!" >&2 exit 1 fi } check_cpu
Case study: Một team viết hàm check_service
, tái dùng trong 5 script giám sát – giảm 50% thời gian bảo trì.
Modular Hóa
- Lưu hàm vào file riêng (
functions.sh
):# functions.sh check_disk() { local DISK=$(df -h "$1" | tail -1 | awk '{print $5}' | cut -d'%' -f1) echo "$DISK" }
- Import:
source ./functions.sh check_disk "/"
Kết Luận
Function trong Bash DevOps là bước tiến để tái sử dụng Bash và xây dựng script modular Bash. Thực hành với system_check.sh
cho thấy bạn có thể tổ chức code gọn gàng, dễ mở rộng – rất cần trong tự động hóa DevOps. Bài tiếp theo, chúng ta sẽ khám phá Quản Lý Biến và Môi Trường – cách kiểm soát biến như pro.