Cơ bản Bash Script trong DevOps
Trong công việc DevOps, có rất nhiều tác vụ lặp lại hằng ngày: kiểm tra dung lượng ổ đĩa, xem service còn chạy không, backup file cấu hình, gom log, hoặc chạy một chuỗi lệnh deploy đơn giản. Nếu làm thủ công từng bước, bạn rất dễ quên lệnh, gõ sai tham số hoặc mất thời gian khi phải thao tác trên nhiều server.
Bash Script giúp đóng gói các lệnh đó thành một file có thể chạy lại nhiều lần. Đây là kỹ năng nền tảng trước khi bạn đi sâu vào CI/CD, Docker, Kubernetes, Cloud CLI hay automation phức tạp hơn.
Bash là gì?
Bash là viết tắt của Bourne Again SHell — một chương trình shell phổ biến trên Linux và macOS. Shell nhận lệnh từ người dùng, diễn giải lệnh đó, rồi yêu cầu hệ điều hành thực thi.
Khi bạn gõ lệnh trong terminal như:
| |
bạn đang tương tác với shell. Khi gom nhiều lệnh vào một file text, file đó trở thành shell script. Theo tài liệu chính thức của GNU Bash, một shell script là file văn bản chứa các lệnh shell; khi được Bash chạy, Bash đọc và thực thi các lệnh trong file đó rồi thoát.
Vì sao DevOps cần biết Bash?
Bash không thay thế các công cụ như Ansible, Terraform hay Jenkins, nhưng nó là lớp keo rất hữu ích để nối các công cụ lại với nhau.
| Tình huống DevOps | Bash giúp gì? |
|---|---|
| Kiểm tra server nhanh | Gom hostname, df, free, uptime vào một script |
| Deploy ứng dụng nhỏ | Chạy pull code, build, restart service theo đúng thứ tự |
| Dọn log hoặc file tạm | Tự động tìm và xoá file cũ theo lịch |
| CI/CD pipeline | Viết step build/test/deploy có exit code rõ ràng |
| Tích hợp tool | Gọi docker, kubectl, aws, curl, jq từ một script |
Điểm mạnh của Bash là có sẵn trên hầu hết server Linux, không cần cài runtime phức tạp. Với những tác vụ nhỏ, một script 20–50 dòng thường đủ nhanh, dễ đọc và dễ đưa vào pipeline.
Script đầu tiên với hello.sh
Tạo file hello.sh:
| |
Thêm nội dung sau:
| |
Chạy script bằng Bash:
| |
Hoặc cấp quyền thực thi rồi chạy trực tiếp:
| |
Shebang dùng để làm gì?
Dòng đầu tiên:
| |
được gọi là shebang. Nó cho hệ điều hành biết nên dùng chương trình nào để chạy file này. Cách viết #!/usr/bin/env bash thường linh hoạt hơn #!/bin/bash vì Bash có thể nằm ở vị trí khác nhau tuỳ hệ thống.
Làm việc với biến
Biến giúp script lưu giá trị để tái sử dụng. Cú pháp gán biến trong Bash không có khoảng trắng quanh dấu =:
| |
Nên dùng ${VAR} khi ghép biến với chuỗi để tránh Bash hiểu nhầm tên biến:
| |
Một số biến đặc biệt hay gặp
| Biến | Ý nghĩa |
|---|---|
$0 | Tên script đang chạy |
$1 | Tham số đầu tiên truyền vào script |
$# | Tổng số tham số |
$? | Exit code của lệnh vừa chạy |
$$ | Process ID của shell hiện tại |
Ví dụ script nhận tên môi trường:
| |
Chạy thử:
| |
Nếu không truyền tham số, ${1:-dev} sẽ dùng giá trị mặc định là dev.
Một số lệnh cơ bản thường dùng
echo
echo in nội dung ra màn hình, rất hữu ích để hiển thị trạng thái trong script:
| |
read
read đọc input từ người dùng:
| |
Trong script, nên dùng read -r để tránh việc dấu backslash bị diễn giải ngoài ý muốn.
cat
cat thường dùng để xem nhanh nội dung file hoặc tạo file mẫu:
| |
Tạo file cấu hình bằng here-document:
| |
ls
ls liệt kê file/thư mục:
| |
Trong script production, nếu cần xử lý danh sách file phức tạp, bạn nên cẩn thận với tên file có khoảng trắng. Các bài sau về xử lý file sẽ đi sâu hơn vào chủ đề này.
Thực hành DevOps: check_system.sh
Ví dụ dưới đây tạo một script kiểm tra nhanh thông tin hệ thống: hostname, hệ điều hành, uptime, CPU load, RAM và dung lượng ổ đĩa root.
Tạo file:
| |
Nội dung script:
| |
Cấp quyền và chạy:
| |
Output có thể tương tự:
| |
Điểm đáng chú ý trong script:
set -euo pipefailgiúp script dừng khi gặp lỗi, khi dùng biến chưa khai báo, hoặc khi một lệnh trong pipeline bị lỗi.df -P /dùng định dạng POSIX để output ổn định hơn khi parse bằngawk.command -v freekiểm tra lệnhfreecó tồn tại trước khi gọi.exit 1khi disk vượt ngưỡng giúp CI/CD hoặc cron job nhận biết script đang báo lỗi.
Debug script với bash -n và bash -x
Khi script dài hơn, bạn cần kiểm tra lỗi cú pháp và xem Bash thực thi từng lệnh như thế nào.
Kiểm tra cú pháp với bash -n
| |
Tuỳ chọn -n yêu cầu Bash đọc lệnh nhưng không thực thi. Nó hữu ích để phát hiện lỗi như thiếu fi, thiếu dấu nháy, hoặc sai cú pháp vòng lặp.
Trace từng lệnh với bash -x
| |
Tuỳ chọn -x in ra từng lệnh sau khi Bash đã expand biến và trước khi thực thi. Đây là cách rất nhanh để biết script đang nhận giá trị nào.
Bạn cũng có thể bật/tắt trace trong một đoạn cụ thể:
| |
Lưu ý bảo mật: Không bật
set -xquanh đoạn xử lý secret/token vì giá trị nhạy cảm có thể bị in ra log.
Best practice khi mới viết Bash
Một vài thói quen nhỏ sẽ giúp script dễ đọc và ít lỗi hơn:
- Luôn quote biến: dùng
"${VAR}"thay vì$VAR, đặc biệt khi giá trị có khoảng trắng. - Đặt tên biến rõ nghĩa:
DISK_USAGE_PERCENTdễ hiểu hơnDhoặcVALUE. - Dùng
set -euo pipefailcó chủ đích: tốt cho nhiều script automation, nhưng cần hiểu luồng lỗi trước khi dùng trong script phức tạp. - Kiểm tra command trước khi dùng:
command -v docker,command -v jq,command -v kubectl. - Không hardcode thông tin nhạy cảm: token, password, private key nên lấy từ environment variable hoặc secret manager.
- Trả exit code rõ ràng:
exit 0cho thành công, khác0cho lỗi để cron/CI/CD nhận biết. - Chạy
bash -ntrước khi deploy: đây là bước kiểm tra nhanh nhưng rất hữu ích.
Ghi chú triển khai
- Khi áp dụng vào dự án của bạn, hãy bắt đầu bằng các script nhỏ, rõ mục tiêu:
check_system.sh,backup_config.sh,restart_service.sh. Đừng cố viết một script quá lớn ngay từ đầu. - Best practices:
- Đặt script trong thư mục riêng như
scripts/hoặcops/. - Thêm README ngắn mô tả cách chạy, tham số đầu vào và ví dụ output.
- Với script chạy trong CI/CD, luôn kiểm tra exit code và log đủ thông tin để debug.
- Đặt script trong thư mục riêng như
- Troubleshooting:
- Lỗi
Permission denied? → Chạychmod +x script.shhoặc dùngbash script.sh. - Lỗi
command not found? → Kiểm tra command đã cài chưa và biếnPATHcó đúng không. - Script chạy khác giữa local và server? → Kiểm tra phiên bản Bash bằng
bash --versionvà hệ điều hành bằngcat /etc/os-release.
- Lỗi
🎯 Lời kết
Bash Script là kỹ năng nền tảng nhưng rất thực dụng trong DevOps. Chỉ với vài lệnh cơ bản như echo, read, cat, ls, kết hợp biến và kiểm tra exit code, bạn đã có thể tự động hóa nhiều tác vụ vận hành hằng ngày.
Ở bài tiếp theo, chúng ta sẽ đi vào điều kiện trong Bash với if/elif/else, toán tử so sánh, kiểm tra file và case...esac — những thành phần giúp script bắt đầu có logic xử lý linh hoạt hơn. 🚀
Tài liệu tham khảo
- GNU Bash Manual — Tài liệu chính thức về Bash, shell scripts, biến, builtins và các tuỳ chọn như
-n,-x. - GNU Bash Reference Manual - Shell Scripts — Mô tả cách Bash đọc và thực thi shell script.
- GNU Bash Reference Manual - The Set Builtin — Tham khảo các tuỳ chọn
set, bao gồm-u,-x,-n.
