Bài 1: Cơ Bản Bash Script – Hiểu và Viết Script Đầu Tiên trong DevOps
Bash Là Gì?
Bash (Bourne Again Shell) là một shell phổ biến trên Linux/Unix, vừa là nơi bạn gõ lệnh, vừa là ngôn ngữ script để tự động hóa.
- Shell: Giao diện giữa bạn và hệ điều hành (VD:
ls,cd,rm). - Script: Tập hợp lệnh trong file để chạy tự động, tiết kiệm thời gian.
Ví dụ: Thay vì gõ df -h mỗi lần kiểm tra disk, ta có thể viết script để nó tự in kết quả – đơn giản nhưng hiệu quả.
Tại Sao Bash Quan Trọng trong DevOps?
- Tự động hóa: Từ việc nhỏ như kiểm tra log đến lớn như deploy ứng dụng.
- Nhẹ và nhanh: Không cần ngôn ngữ phức tạp như Python cho task cơ bản.
- Tích hợp: Hầu hết tool DevOps (Docker, Git, CI/CD) đều hỗ trợ Bash.
Thực tế: Tôi dùng Bash để kiểm tra CPU server mỗi 5 phút, phát hiện vấn đề sớm hơn cả monitoring tool
Bắt Đầu với Bash Script
Viết Script Đầu Tiên
Viết script đơn giản nhất – in lời chào:
Tạo file hello.sh:
#!/bin/bash
echo "Hello World!"
Chạy script:
chmod +x hello.sh
./hello.sh
-
- Kết quả: “Hello World!”.
#!/bin/bash: Shebang, bảo Bash chạy script này.chmod +x: Cấp quyền thực thi../hello.sh: Chạy file.
Biến trong Bash (Variables)
Biến dùng để lưu giá trị để dùng lại – cực kỳ hữu ích.
- Khai báo và in:
NAME="DevOps" echo "Xin chào, $NAME!"- Kết quả: “Xin chào, DevOps!”.
- Biến môi trường:
echo "User hiện tại: $USER" echo "Thư mục home: $HOME" - Gán lệnh vào biến:
DATE=$(date) echo "Hôm nay là: $DATE"
Tips: Không có khoảng trắng quanh = khi gán biến (VD: NAME="DevOps", không phải NAME = "DevOps").
DevOps/System: Biến giúp lưu config như IP server, đường dẫn file – bạn sẽ thấy sức mạnh khi tích hợp CI/CD sau này.
Lệnh Cơ Bản Bash
echo: In ra màn hình.
echo "Dung lượng disk: $(df -h / | tail -1)"
$(...): Command substitution, chạy lệnh và lấy output.
read: Lấy input từ user.
read -p "Input your name!: " NAME
echo "Chào $NAME, welcome to DevOps!"
cat, ls, pwd: Lệnh Linux cơ bản.
cat /etc/hostname # view hostname
ls /data # Xem danh sách các file trong thư mục data
pwd # print current folder
Thực tế: Tôi thường dùng echo kết hợp $(date) để thêm timestamp vào log – đơn giản mà hiệu quả.
Practice: Script Kiểm Tra Hệ Thống
Script Đầu Tiên Thực Tế
Tạo check_system.sh để kiểm tra thông tin hệ thống:
#!/bin/bash
# Information storage variable
HOST=$(hostname)
DISK=$(df -h / | tail -1 | awk '{print $5}') # Lấy % disk usage
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}') # Lấy % CPU
# Print result
echo "Hostname: $HOST"
echo "Disk usage: $DISK"
echo "CPU usage: $CPU%"
Chạy và Test
chmod +x check_system.sh
./check_system.sh
- Kết quả mẫu:
root@ip-172-31-15-92:~# ./check-system.sh Hostname: ip-172-31-15-92 Disk usage: 12% CPU usage: 0.0%
Giải thích:
hostname: Lấy tên máy.df -h | tail -1: Lấy dòng cuối (root filesystem).awk '{print $5}': Trích cột % usage.top -bn1: Chạy 1 lần để lấy CPU.
DevOps: Script này là khởi đầu để bạn tự động kiểm tra server – thêm cron (bài 8) để chạy định kỳ.
Debug Cơ Bản
- Nếu lỗi:
bash -x check_system.sh-x: In từng lệnh khi chạy, giúp dễ dàng debug
- Kiểm tra cú pháp:
bash -n check_system.sh-n: Không chạy script, chỉ check lỗi cú pháp.
Thực tế: Tôi từng quên $ trước biến, -x giúp tôi phát hiện ngay trong 10 giây.
Ứng Dụng trong System/DevOps
Tự Động Hóa Nhỏ
- Script kiểm tra disk:
DISK=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1) echo "Disk usage: $DISK%"
Chuẩn Bị cho Pipeline
- Lưu output vào file:
./check_system.sh > system_status.txt - Dùng trong CI/CD để báo cáo trạng thái server trước deploy.
Case study: Một team dùng script tương tự để kiểm tra disk trước backup, tránh lỗi do đầy dung lượng.
Best Practice
- Luôn bắt đầu bằng
#!/bin/bash. - Dùng biến thay giá trị cứng (VD:
$HOSTthay vì “my-server”). - Comment rõ ràng để team đọc hiểu.
Kết Luận
Cơ Bản Bash Script trong System/DevOps là nền tảng để bạn bắt đầu tự động hóa với biến Bash, lệnh cơ bản Bash, và script đơn giản. Thực hành với check_system.sh cho thấy Bash dễ học mà mạnh mẽ – chỉ cần vài dòng đã giải quyết được việc lặp lại. Bài tiếp theo, chúng ta sẽ khám phá Điều Kiện trong Bash – cách thêm logic để script thông minh hơn. Bạn đã sẵn sàng chưa?
