Tổng quan về kịch bản Shell trong Linux

1. Cấu trúc cơ bản của tập lệnh Shell

Một tập lệnh Shell là một tệp văn bản chứa chuỗi các lệnh được viết theo cú pháp của trình thông dịch dòng lệnh (shell), thường là /bin/bash. Khi thực thi, shell đọc từng dòng và thực hiện tuần tự các lệnh bên trong — không cần biên dịch, chỉ cần giải thích và chạy.
  • Shebang (khối khai báo trình thông dịch): Dòng đầu tiên bắt đầu bằng #!/bin/bash hoặc tương đương (ví dụ: #!/usr/bin/env bash) để hệ thống biết dùng trình thông dịch nào.
  • Lệnh thực thi: Các câu lệnh hợp lệ như ls, cp, if, for, v.v., tạo nên logic xử lý.
  • Ghi chú:
    • Đơn dòng: bắt đầu bằng #, ví dụ # Lưu ý: biến này lưu đường dẫn tạm.
    • Đa dòng: sử dụng <<EOF ... EOF, trong đó EOF có thể thay bằng bất kỳ nhãn nào (ví dụ <<DOC).
  • Quyền thực thi: Tập lệnh phải có quyền x (execute) để chạy trực tiếp: chmod +x script.sh

2. Lệnh echo và các tùy chọn nâng cao

echo là công cụ xuất dữ liệu cơ bản, mặc định kết thúc bằng ký tự xuống dòng (\n). Sự khác biệt giữa trích dẫn đơn và kép ảnh hưởng đến việc mở rộng (expansion):
# Mở rộng lệnh con (command substitution) chỉ hoạt động trong trích dẫn kép
$ echo "Thư mục hiện tại: $(pwd)"
Thư mục hiện tại: /home/user

$ echo 'Thư mục hiện tại: $(pwd)'
Thư mục hiện tại: $(pwd)

# Cảnh giác với dấu chấm phẩy: trong trích dẫn kép, nó là ký tự bình thường
$ echo "abc;def"
abc;def

# Ngoài trích dẫn, dấu chấm phẩy phân tách lệnh → lỗi nếu lệnh không tồn tại
$ echo abc;def
abc
-bash: def: command not found
Tùy chọnMô tả
-nKhông in ký tự xuống dòng cuối cùng
-eKích hoạt giải thích các ký tự thoát

Các ký tự thoát phổ biến:

  • \n: xuống dòng
  • \t: tab ngang
  • \r: ký tự hồi đầu dòng (carriage return)
  • \b: backspace
  • \v: tab dọc

Màu sắc đầu ra với echo -e

Dùng mã ANSI để điều khiển màu chữ và nền:
# Đặt màu chữ đỏ, sau đó reset về mặc định
$ echo -e "\033[1;31mLỗi nghiêm trọng\033[0m"

# Đặt nền xanh lá, chữ trắng
$ echo -e "\033[1;42;37mThành công!\033[0m"

# Bảng mã màu nhanh:
# Chữ: 30–37 | Nền: 40–47 | Reset: \033[0m

3. Truyền dữ liệu từ người dùng: lệnh read

read cho phép thu thập đầu vào từ bàn phím và gán vào biến. Một số tùy chọn hữu ích:
  • -p "prompt": hiển thị thông báo trước khi nhập
  • -t N: giới hạn thời gian chờ N giây
  • -s: ẩn ký tự nhập (dùng cho mật khẩu)
  • -r: vô hiệu hóa xử lý ký tự thoát (giữ nguyên dấu ngược)
# Ví dụ tương tác
#!/bin/bash
read -p "Nhập tên bạn: " ten
read -t 5 -p "Nhập tuổi (5s): " tuoi
echo "Xin chào, $ten! Tuổi: ${tuoi:-chưa nhập}"

4. Các phương thức thực thi tập lệnh

Có bốn cách phổ biến, mỗi cách có hành vi quản lý tiến trình và phạm vi biến khác nhau:
  1. bash script.sh: Tạo tiến trình con mới, dùng bash cố định — biến cục bộ không ảnh hưởng đến shell cha.
  2. ./script.sh: Cần quyền thực thi; dùng trình thông dịch được khai báo trong shebang — cũng chạy trong tiến trình con.
  3. source script.sh hoặc . script.sh: Không tạo tiến trình mới; mọi biến, hàm, thay đổi môi trường đều tồn tại trong shell hiện tại.
# Minh họa phạm vi biến
$ echo 'DIR=$(pwd)' > demo.sh
$ bash demo.sh
$ echo "$DIR"        # → rỗng (biến không tồn tại ở shell cha)

$ source demo.sh
$ echo "$DIR"        # → /home/user/demo (biến được giữ lại)

Thẻ: Bash linux-shell shell-scripting

Đăng vào ngày 29 tháng 6 lúc 01:45