RDP Monster

File .sh là gì? Hướng dẫn shell script, Bash và scripting trên Linux

File .sh là gì? Hướng dẫn shell script, Bash và scripting trên Linux

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.

 

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 file
touch myscript.sh


Bước 2: Chỉnh sửa file
nano 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 thi
chmod +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ịch
bash 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


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 loop
for 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 definition
greet() {
 echo "Hello, $1!"
}
 
# Function with return value
add() {
  return $(($1 + $2))
}
 
# Function calls
greet "Alice"
add 5 3
echo "Sum: $?" # $? holds return value
 
 

Các khái niệm scripting nâng cao

Xử lý lỗi

#!/bin/bash
set -e # Exit on error
 
# Check command success
if ! command_name; then
  echo "Command failed"
  exit 1
fi
 
# Trap errors
trap 'echo "Error on line $LINENO"' ERR


Thao tác với file

# File existence checking
if [ -f "/path/to/file" ]; then
  echo "File exists"
fi
 
# Directory operations
if [ -d "/path/to/dir" ]; then
 echo "Directory exists"
fi
 
# Read file line-by-line
while IFS= read -r line; do
  echo "Line: $line"
done < filename.txt


Nhập liệu từ người dùng

# Read from user
read -p "Enter your name: " name
 
# Read multiple values
read -p "Enter values: " val1 val2 val3
 
# Read into array
read -a array_name
 
 

Ví dụ thực tế

Script sao lưu hệ thống

#!/bin/bash
 
# Backup important directories
BACKUP_DIR="/backup"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "Starting backup..."
 
# Create backup directory
mkdir -p "$BACKUP_DIR"
 
# Backup home directory
tar -czf "$BACKUP_DIR/home_$TIMESTAMP.tar.gz" /home
 
# Backup system configuration
tar -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/bash
 
THRESHOLD=80
ALERT_EMAIL="[email protected]"
 
# Check disk usage
disk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
 
if [ $disk_usage -gt $THRESHOLD ]; then
  echo "Disk usage critical: $disk_usage%" | mail -s "Alert" $ALERT_EMAIL
  echo "Alert sent to $ALERT_EMAIL"
fi


Cấp phát tài khoản người dùng

#!/bin/bash
 
read -p "Enter username: " username
read -p "Enter email: " email
 
# Create user
useradd -m -s /bin/bash "$username"
 
# Set password (prompt method recommended)
echo "Set password for $username:"
passwd "$username"
 
# Add to groups
usermod -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

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?

.sh là phần mở rộng chung cho shell script (bất kỳ shell nào); còn bash chỉ riêng Bash shell.

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?

Hãy dùng #!/usr/bin/env bash để đảm bảo tính di động trên các hệ thống mà bash có thể được cài ở vị trí không chuẩn.

Vì sao script của tôi bị lỗi khi chạy từ cron?

Cron chạy trong một môi trường tối giản.

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?

Dùng chmod +x scriptname.sh để thêm quyền thực thi.

Có chạy được shell script trên Windows không?

Windows Subsystem for Linux (WSL) hoặc Git Bash cho phép chạy shell script.

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?

Trong Bash, hai lệnh này tương đương nhau; cả hai đều thực thi script trong shell hiện tại.

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?

Đây là cách làm:

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?

Có!

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ư.

Đăng ký chương trình đại lý của chúng tôi

Thông tin của bạn

Nếu bạn có bất kỳ câu hỏi nào, liên hệ với chúng tôi tại đây !
Họ và tên(Bắt buộc)
Nhập địa chỉ email của bạn, bạn cần có tài khoản trên manager.rdp.monster !

Công ty của bạn

Nhập địa chỉ website của bạn nếu có
Giải thích ngắn gọn cách bạn sẽ bán dịch vụ cho khách hàng. Ví dụ: trò chuyện với mọi người trên các diễn đàn.

Đến quái vật cũng mê cookie!

Chúng tôi sử dụng cookie để cải thiện trải nghiệm duyệt web của bạn, hiển thị quảng cáo hoặc nội dung phù hợp và phân tích lưu lượng truy cập. Khi nhấn "Chấp nhận", bạn đồng ý với việc chúng tôi sử dụng cookie.