File .sh là gì? Hướng dẫn shell script, Bash và scripting trên Linux
- 4 tháng 11, 2025
- 22:51
- Bởi Adrien Roche
- Cập nhật 7 tháng 10, 2026
- Hướng dẫn

Giới thiệu
Shell script là nền tảng của việc quản trị hệ thống Linux và Unix, mang lại khả năng tự động hóa mạnh mẽ giúp nâng cao đáng kể năng suất và hiệu quả quản lý hệ thống. File .sh chứa một script viết bằng ngôn ngữ shell, một ngôn ngữ lập trình chuyên dụng để thông dịch lệnh và tự động hóa các tác vụ hệ thống lặp đi lặp lại.
Dù bạn là quản trị viên hệ thống quản lý hàng trăm máy chủ, lập trình viên tự động hóa quy trình triển khai hay người yêu thích Linux muốn nâng cao kỹ năng, hiểu về shell script là điều thiết yếu. Hướng dẫn toàn diện này giải thích file .sh là gì, cách chúng hoạt động, các loại shell khác nhau và những ví dụ thực tế minh họa ứng dụng của scripting.
File .sh là gì?
Định nghĩa
File .sh là một file văn bản thuần chứa chuỗi lệnh shell được trình thông dịch shell thực thi lần lượt. Phần mở rộng .sh cho biết file là shell script, dù trên thực tế nhiều shell script không dùng phần mở rộng này.
Shell script là cầu nối giữa việc gõ lệnh tương tác và lập trình hoàn chỉnh. Chúng cho phép bạn:
-
Tự động hóa các tác vụ lặp lại
-
Kết hợp nhiều lệnh thành các quy trình phức tạp
-
Tạo công cụ quản trị có thể tái sử dụng
-
Lên lịch các tác vụ bảo trì tự động
-
Triển khai ứng dụng bằng mã lệnh
Đặc điểm
Định dạng văn bản thuần: Khác với chương trình phải biên dịch, shell script là văn bản dễ đọc được shell thông dịch trực tiếp.
Dựa trên trình thông dịch: Việc thực thi phụ thuộc vào trình thông dịch shell được chỉ định (Bash, Ksh, v.v.), không phụ thuộc vào kiến trúc hệ thống bên dưới.
Dòng shebang: Hầu hết shell script bắt đầu bằng một dòng shebang (#!/bin/bash) chỉ định trình thông dịch shell sẽ dùng.
Đa nền tảng: Shell script chạy nhất quán trên các hệ thống Unix/Linux khác nhau (miễn là đã cài các shell phù hợp).
Ứng dụng thực tế
-
Script khởi động và tắt hệ thống
-
Tự động hóa sao lưu và khôi phục
-
Giám sát máy chủ và cảnh báo
-
Quy trình triển khai ứng dụng
-
Xử lý và phân tích file log
-
Cấp phát tài khoản người dùng
-
Tự động hóa cấu hình mạng
-
Các tác vụ bảo trì cơ sở dữ liệu
Kiến thức nền tảng về shell scripting
Shell là gì?
Shell là một trình thông dịch lệnh, đóng vai trò giao diện giữa người dùng và nhân (kernel) hệ điều hành. Shell nhận lệnh từ người dùng, thông dịch và thực thi các chương trình tương ứng.
Chức năng của shell:
-
Đọc và phân tích lệnh của người dùng
-
Tìm kiếm chương trình thực thi
-
Thực thi chương trình với các tham số phù hợp
-
Xử lý chuyển hướng đầu vào/đầu ra
-
Quản lý tiến trình
-
Hỗ trợ các cấu trúc lập trình (vòng lặp, điều kiện)
Vì sao nên dùng shell script?
Tự động hóa: Thực thi tự động các chuỗi thao tác phức tạp mà không cần can thiệp thủ công.
Hiệu quả: Hoàn thành trong vài giây những việc có thể mất hàng giờ nếu làm thủ công.
Nhất quán: Đảm bảo các thao tác giống hệt nhau trên nhiều hệ thống.
Tài liệu hóa: Chú thích trong script ghi lại quy trình để tham khảo về sau.
Khả năng mở rộng: Mở rộng thao tác từ một máy chủ lên hàng trăm máy chủ mà không tốn thêm công sức.
Khôi phục: Dựng lại hệ thống nhanh chóng bằng các script có sẵn.
Các loại shell phổ biến
Bash (Bourne-Again Shell)
Thị phần: ~95% hệ thống Linux
Tác giả: Brian Fox (dự án GNU)
Tính năng: Bộ tính năng đầy đủ, khả năng scripting tốt
Cú pháp: Tương thích với Bourne shell gốc
Trường hợp sử dụng: Mặc định trên hầu hết các bản phân phối Linux
Bash là tiêu chuẩn trên thực tế cho shell scripting trên Linux. Bash cân bằng giữa khả năng tương thích với các shell gốc và các tính năng hiện đại.
Ksh (Korn Shell)
Tác giả: David Korn (AT&T Bell Labs)
Tính năng: Khả năng lập trình nâng cao, thực thi nhanh hơn
Cú pháp: Là tập mở rộng (superset) của Bourne shell
Trường hợp sử dụng: Được ưa chuộng trên các hệ thống Unix (Solaris, AIX)
Ưu điểm: Hiệu năng tốt hơn cho các thao tác tính toán nặng
Ksh vẫn phổ biến trong môi trường Unix doanh nghiệp, đặc biệt trên các hệ thống Unix thương mại.
Sh (Bourne Shell)
Shell chuẩn POSIX nguyên bản
Tác giả: Stephen Bourne (AT&T Bell Labs)
Tính năng: Chức năng tối giản, được chuẩn hóa
Hiện trạng: Chủ yếu mang tính lịch sử; các shell hiện đại đều cung cấp khả năng tương thích
Sh đại diện cho tiêu chuẩn POSIX, đảm bảo khả năng tương thích cơ bản trên mọi hệ thống tương tự Unix.
Zsh (Z Shell)
Tác giả: Paul Falstad
Tính năng: Tính năng tương tác, khả năng scripting
Định hướng hiện đại: Ưu tiên trải nghiệm người dùng hơn là thuần scripting
Trường hợp sử dụng: Ngày càng phổ biến trong giới lập trình viên
Zsh thể hiện bước tiến hóa hiện đại của shell, cân bằng giữa sức mạnh scripting và các tính năng tương tác thân thiện với người dùng.
Tcsh/Csh
Tác giả Csh: Bill Joy (Berkeley)
Phiên bản hiện đại: Tcsh (csh cải tiến)
Tính năng: Cú pháp giống ngôn ngữ C
Tình trạng: Ít được dùng dần, chủ yếu duy trì để tương thích
Các biến thể của Csh vẫn còn trên một số hệ thống nhưng ngày càng kém lợi thế so với Bash/Ksh.
Bash, Ksh và các shell khác
Bảng so sánh
| Tính năng | Bash | Ksh | Zsh | Sh |
|---|---|---|---|---|
| Lịch sử lệnh | Có | Có | Có | Không |
| Tự động hoàn thành lệnh | Cơ bản | Cơ bản | Nâng cao | Không |
| Mảng | Chỉ mục | Chỉ mục + kết hợp (associative) | Có | Không |
| So khớp mẫu | Mẫu glob | Nâng cao | Nâng cao | Hạn chế |
| Hàm | Có | Có | Có | Có |
| Tính toán số học | $(()) |
(()) |
$(()) |
Hạn chế |
| Tuân thủ POSIX | ~95% | 100% | ~90% | 100% |
| Hiệu năng | Tốt | Tốt hơn | Tốt | Nhanh nhất |
| Tính năng scripting | Đầy đủ | Nâng cao hơn | Nâng cao nhất | Tối giản |
| Khả năng tương thích | Rất tốt | Rất tốt | Tốt | Phổ quát |
| Độ khó khi học | Trung bình | Trung bình | Khó hơn | Dễ nhất |
| Sử dụng điển hình | Mặc định trên Linux | Unix doanh nghiệp | Lựa chọn của lập trình viên | Khả năng tương thích |
Khi nào nên chọn từng loại shell
Chọn Bash khi:
-
Cần tương thích tối đa với hệ thống Linux
-
Làm việc với các công cụ yêu cầu cú pháp Bash
-
Cả nhóm đã quen với Bash
-
Môi trường tập trung vào Linux
Chọn Ksh khi:
-
Thao tác đòi hỏi hiệu năng cao
-
Môi trường Unix doanh nghiệp
-
Cần các tính năng lập trình nâng cao
-
Hỗ trợ các hệ thống Unix cũ
Chọn Zsh khi:
-
Ưu tiên sử dụng shell tương tác
-
Muốn trải nghiệm người dùng nâng cao
-
Môi trường dành cho lập trình viên
-
Các bản phân phối Linux hiện đại
Chọn Sh khi:
-
Cần tính di động POSIX tối đa
-
Hỗ trợ nhiều nền tảng Unix khác nhau
-
Giảm thiểu phụ thuộc
-
Cần thực thi gọn nhẹ
Tạo và chạy shell script
Tạo một shell script cơ bản
Bước 1: Tạo filetouch myscript.sh
Bước 2: Chỉnh sửa filenano myscript.sh
Bước 3: Thêm shebang và các lệnh#!/bin/bash
echo "Hello, World!"
date
Bước 4: Cấp quyền thực thichmod +x myscript.sh
Bước 5: Chạy script./myscript.sh
Các cách thực thi
Thực thi trực tiếp (cần quyền thực thi)./myscript.sh
Chỉ định rõ trình thông dịchbash myscript.sh
Lệnh source (thực thi trong shell hiện tại)source myscript.sh
or
. myscript.sh
Hiểu về shebang
Dòng shebang (#!) chỉ định trình thông dịch sẽ thực thi script:#!/bin/bash # Use Bash
#!/bin/ksh # Use Ksh
#!/usr/bin/env bash # Use Bash via environment (more portable)
#!/usr/bin/python # Use Python interpreter
Cú pháp shell script cơ bản
Biến
# Variable assignment (no spaces around =)
name="John"
age=30
# Using variables
echo "Name: $name"
echo "Age: $age"
# Command substitution
current_date=$(date)
file_count=$(ls -1 | wc -l)
# Arrays (Bash)
fruits=("Apple" "Banana" "Cherry")
echo ${fruits} # Access first element
Câu lệnh điều kiện
# If-else
if [ $age -gt 18 ]; then
echo "Adult"else
echo "Minor"
fi
# Case statement
case $day in
Monday)
echo "Start of week"
;;
Friday) echo "End of week"
;;
*)
echo "Midweek"
;;esac
Vòng lặp
# For loopfor i in 1 2 3 4 5; do echo "Number: $i"done# While loop
count=0
while [ $count -lt 5 ]; do echo "Count: $count" ((count++))
done
# Until loop
until [ $count -eq 10 ]; do
echo "Count: $count" ((count++))
done
Hàm
# Function definitiongreet() {echo "Hello, $1!"}# Function with return valueadd() {return $(($1 + $2))}# Function calls
greet "Alice"add 5 3echo "Sum: $?" # $? holds return valueCác khái niệm scripting nâng cao
Xử lý lỗi
#!/bin/bashset -e # Exit on error# Check command successif ! command_name; then echo "Command failed" exit 1fi# Trap errorstrap 'echo "Error on line $LINENO"' ERR
Thao tác với file
# File existence checkingif [ -f "/path/to/file" ]; then echo "File exists"fi# Directory operationsif [ -d "/path/to/dir" ]; thenecho "Directory exists"fi# Read file line-by-linewhile IFS= read -r line; doecho "Line: $line"done < filename.txt
Nhập liệu từ người dùng
# Read from userread -p "Enter your name: " name
# Read multiple valuesread -p "Enter values: " val1 val2 val3
# Read into arrayread -a array_nameVí dụ thực tế
Script sao lưu hệ thống
#!/bin/bash# Backup important directoriesBACKUP_DIR="/backup"TIMESTAMP=$(date +%Y%m%d_%H%M%S)echo "Starting backup..."# Create backup directorymkdir -p "$BACKUP_DIR"# Backup home directorytar -czf "$BACKUP_DIR/home_$TIMESTAMP.tar.gz" /home
# Backup system configurationtar -czf "$BACKUP_DIR/etc_$TIMESTAMP.tar.gz" /etc
echo "Backup complete: $BACKUP_DIR/home_$TIMESTAMP.tar.gz"
Giám sát dung lượng ổ đĩa
#!/bin/bashTHRESHOLD=80ALERT_EMAIL="[email protected]"# Check disk usagedisk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)if [ $disk_usage -gt $THRESHOLD ]; thenecho "Disk usage critical: $disk_usage%" | mail -s "Alert" $ALERT_EMAILecho "Alert sent to $ALERT_EMAIL"fi
Cấp phát tài khoản người dùng
#!/bin/bashread -p "Enter username: " usernameread -p "Enter email: " email
# Create useruseradd -m -s /bin/bash "$username"# Set password (prompt method recommended)echo "Set password for $username:"passwd "$username"# Add to groupsusermod -aG sudo "$username"echo "User $username created successfully"Vì sao quản trị máy chủ từ xa dùng shell script
Quản trị viên hệ thống quản lý máy chủ từ xa qua kết nối RDP hoặc SSH thường xuyên chạy shell script để:
-
Triển khai tự động: Triển khai ứng dụng đồng thời trên nhiều máy chủ
-
Bảo trì hệ thống: Lên lịch và thực hiện các tác vụ bảo trì định kỳ
-
Giám sát: Theo dõi liên tục tình trạng hệ thống và ghi lại các bất thường
-
Sao lưu: Tự động hóa quy trình sao lưu dữ liệu quan trọng
-
Cập nhật bảo mật: Triển khai bản vá bảo mật trên toàn bộ hạ tầng
Các nền tảng quản lý máy chủ từ xa chuyên nghiệp như RDP.Monster cho phép chạy shell script trên toàn bộ hạ tầng doanh nghiệp:
Quản lý hạ tầng Linux với RDP.Monster
Quản lý Linux cho doanh nghiệp
-
Truy cập SSH để chạy shell script từ xa
-
Khả năng triển khai tự động
-
Thao tác hàng loạt trên nhiều máy chủ
-
Giám sát và cảnh báo theo thời gian thực
Giải pháp VPS cho hạ tầng script
-
Tài nguyên riêng cho các script tính toán nặng
-
Lên lịch cron job lâu dài
-
Thời gian hoạt động ổn định cho các tác vụ theo lịch
-
Hạ tầng có thể mở rộng khi script ngày càng phức tạp
Triển khai hạ tầng Linux cấp doanh nghiệp cho các tác vụ shell script phức tạp với RDP.Monster
Kết luận
Shell script là công cụ tự động hóa mạnh mẽ, thiết yếu cho quản trị hệ thống và phát triển trên Linux. Hiểu về file .sh , các loại shell và kỹ thuật scripting giúp người làm IT tăng năng suất vượt bậc, đảm bảo tính nhất quán và quản lý hiệu quả hạ tầng phức tạp.
Dù bạn dùng Bash trên Linux, Ksh trên Unix doanh nghiệp hay Zsh cho phát triển tương tác, thành thạo shell scripting là điều phân biệt một quản trị viên giỏi với một quản trị viên chỉ ở mức đạt yêu cầu. Công sức đầu tư vào kỹ năng scripting vững chắc sẽ mang lại lợi ích trong hàng chục năm quản trị hệ thống Linux.
Bạn đang quản lý hạ tầng Linux phức tạp cần tự động hóa nâng cao? RDP.Monster cung cấp quyền truy cập SSH và hạ tầng VPS được tối ưu để chạy các shell script quan trọng ở quy mô lớn. Khám phá ngay các giải pháp VPS thân thiện với Linux.
VPS Linux hiệu năng cao
Toàn quyền kiểm soát và hiệu năng vượt trội với VPS Linux của chúng tôi. Lý tưởng để host ứng dụng, quản lý máy chủ và tối ưu quy trình làm việc của bạn.
Bạn chưa chắc mình đang chạy bản phân phối hay phiên bản nào? Hãy kiểm tra phiên bản hệ điều hành bằng dòng lệnh trước.
Máy chủ chuyên dụng hiệu năng cao
Cần tối đa quyền kiểm soát và sức mạnh? Máy chủ chuyên dụng của chúng tôi mang lại hiệu năng vượt trội cho các tác vụ nặng.
Câu hỏi thường gặp
Script .sh và script bash khác nhau thế nào?
Một script bash vẫn chạy được dưới dạng file .sh, nhưng không phải mọi script .sh đều là bash.
Nên dùng #!/bin/bash hay #!/usr/bin/env bash?
Vì sao script của tôi bị lỗi khi chạy từ cron?
Hãy dùng đường dẫn tuyệt đối, khai báo rõ các biến môi trường và ghi đầy đủ đường dẫn trình thông dịch trong dòng shebang.
Làm sao để cấp quyền thực thi cho script?
Có chạy được shell script trên Windows không?
Trên Windows gốc, PowerShell là lựa chọn ưu tiên để tự động hóa.
Lệnh . và lệnh source khác nhau thế nào?
source rõ ràng hơn; . tương thích với các shell cũ hơn.
Làm sao để debug một shell script?
Dùng bash -x scriptname.sh để xem vết thực thi từng dòng, hoặc thêm set -x vào trong script.
Có truyền tham số cho shell script được không?
Dùng các tham số vị trí: $1 (tham số thứ nhất), $2 (thứ hai), v.v. $@ chứa toàn bộ tham số.
Adrien Roche, Biên tập viên hạ tầng & hosting
Kỹ sư hệ thống với hơn 10 năm vận hành các hệ thống Windows Server và Linux. Adrien phụ trách tài liệu hạ tầng của rdp.monster và viết các hướng dẫn về RDP, hosting VPS, quản trị máy chủ, mạng và công cụ bảo vệ quyền riêng tư.
Bài viết liên quan




