Cơ bản về Bash & Câu lệnh đơn giản
Buổi 1: Hello Bash
📄 Nội dung:
-
Tạo file script
-
In ra màn hình
-
Gán và sử dụng biến
#!/bin/bash # Dòng khai báo dùng shell bash để chạy
echo "Xin chào thế giới!" # In ra màn hình
name="Người dùng" # Gán giá trị cho biến 'name'
echo "Chào mừng, $name!" # Sử dụng biến
📌 Giải thích:
-
#!/bin/bash: Khai báo "interpreter" của script là bash shell. -
echo: Dùng để in chuỗi ra màn hình. -
Biến không có dấu
$khi khai báo, nhưng khi gọi ra thì cần$.
Buổi 2: Câu lệnh điều kiện (if-else)
📄 Ví dụ kiểm tra quyền root:
#!/bin/bash
if [ "$EUID" -eq 0 ]; then
echo "Bạn đang là root"
else
echo "Bạn KHÔNG phải root"
fi
📌 Giải thích:
-
$EUID: Biến môi trường trả về UID của người dùng hiện tại. -
[ "$EUID" -eq 0 ]: So sánh số nguyên, nếu bằng 0 => root. -
then ... else ... fi: Cấu trúc điều kiện trong Bash.
Buổi 3: Nhập từ bàn phím
📄 Ví dụ yêu cầu nhập tên
#!/bin/bash
read -p "Nhập tên của bạn: " ten
echo "Xin chào $ten!"
📌 Giải thích:
-
read: Nhận giá trị từ bàn phím và lưu vào biến. -
-p: Hiển thị prompt trước khi nhập.
🧭 Tuần 2: Vòng lặp & Tham số dòng lệnh
Buổi 4: Vòng lặp for & while
📄 In số từ 1 đến 5:
#!/bin/bash
for i in {1..5}; do
echo "Số: $i"
done
📄 Lặp với while:
#!/bin/bash
i=1
while [ $i -le 5 ]; do
echo "Lặp lần $i"
((i++))
done
📌 Giải thích:
-
{1..5}: Tạo dãy số. -
while: Lặp khi điều kiện còn đúng. -
((i++)): Tăng biếnisau mỗi vòng lặp.
Buổi 5: Tham số dòng lệnh
📄 Ví dụ dùng $1, $2, $#
#!/bin/bash
echo "Tham số 1: $1"
echo "Tham số 2: $2"
echo "Tổng số tham số: $#"
📌 Giải thích:
-
$1,$2: Tham số đầu tiên, thứ hai khi gọi script. -
$#: Tổng số tham số truyền vào script.
📄 Gọi script:
./script.sh Linus Torvalds
Buổi 6: Kiểm tra file và thư mục
📄 Kiểm tra file tồn tại
#!/bin/bash
file="myfile.txt"
if [ -f "$file" ]; then
echo "$file tồn tại"
else
echo "$file không tồn tại"
fi
📌 Giải thích:
-
-f: Kiểm tra có phải file thường không.
🧭 Tuần 3: Hàm, Menu, Tự động hóa
Buổi 7: Hàm trong Bash
📄 Ví dụ định nghĩa hàm:
#!/bin/bash
say_hello() {
echo "Xin chào $1!"
}
say_hello "Admin"
📌 Giải thích:
-
say_hellolà một hàm nhận 1 tham số. -
$1là tham số truyền vào hàm.
Buổi 8: Script tạo menu lựa chọn
📄 Menu đơn giản:
#!/bin/bash
echo "1. Xem ngày"
echo "2. Xem thư mục hiện tại"
read -p "Chọn tùy chọn (1/2): " choice
if [ "$choice" == "1" ]; then
date
elif [ "$choice" == "2" ]; then
pwd
else
echo "Lựa chọn không hợp lệ"
fi
📌 Giải thích:
-
date: Hiển thị thời gian hiện tại. -
pwd: In ra thư mục hiện tại.
Buổi 9: Script sao lưu thư mục
📄 Sao lưu /etc thành file tar
#!/bin/bash
backup_dir="/backup"
mkdir -p "$backup_dir"
tar -czf "$backup_dir/etc_backup_$(date +%F).tar.gz" /etc
echo "Đã sao lưu /etc vào $backup_dir"
📌 Giải thích:
-
mkdir -p: Tạo thư mục nếu chưa có. -
tar -czf: Tạo file nén dạng .tar.gz -
$(date +%F): Ngày hiện tại định dạng YYYY-MM-DD.
🧭 Tuần 4: Lập lịch và Hardening
Buổi 10: Lên lịch với Cron
📄 Thêm lịch chạy script mỗi ngày:
crontab -e
📄 Dòng thêm vào:
0 2 * * * /home/user/scripts/backup.sh
📌 Giải thích:
-
Chạy lúc 2h sáng mỗi ngày.
-
0 2 * * *: (Phút, Giờ, Ngày, Tháng, Thứ)
Buổi 11: Tăng tính bảo mật cho script
📄 Gợi ý bảo mật:
-
Sử dụng
set -eđể dừng khi lỗi -
Kiểm tra quyền user (chỉ cho root chạy)
-
Log thông tin
#!/bin/bash
set -e
if [ "$EUID" -ne 0 ]; then
echo "Script này chỉ được chạy bởi root"
exit 1
fi
echo "Chạy bởi root vào $(date)" >> /var/log/script.log
Buổi 12: Dự án nhỏ
📌 Bài tập cuối khóa: Viết một script kiểm tra các dịch vụ quan trọng (nginx, ssh, mysql) và gửi mail nếu có dịch vụ ngừng hoạt động.
Bạn có muốn mình hướng dẫn chi tiết bài tập này?
📦 BONUS: Công cụ hỗ trợ
| Công cụ | Mục đích |
|---|---|
shellcheck |
Kiểm tra lỗi script |
shfmt |
Format script gọn gàng |
logrotate |
Quản lý log tự động |