Chuyển đến nội dung chính

Cách viết Bash Script: Hướng dẫn Bash Scripting đầy đủ

Viết bash script đầu tiên và học những yếu tố thiết yếu: biến, hàm, vòng lặp và điều kiện kèm ví dụ mã chạy được.
· 5 phút đọc

Khám phá cùng AI

Shell là một loại chương trình máy tính cung cấp giao diện với hệ điều hành. Tên gọi shell xuất phát từ việc nó là lớp ngoài cùng bao quanh hệ điều hành.

Để quản lý tương tác giữa người dùng và hệ điều hành, shell nhắc nhập liệu rồi diễn giải đầu vào đó cho hệ điều hành trước khi xử lý mọi đầu ra nhận được. Đầu vào này có thể được cung cấp qua giao diện dòng lệnh (CLI) hoặc giao diện đồ họa (GUI), tùy theo tác vụ và vai trò của máy tính.

Về bản chất, shell cho phép người dùng và các chương trình khác giao tiếp trực tiếp với các thành phần của hệ điều hành.

Tóm tắt nhanh

  • Một bash script là tệp văn bản thuần có phần mở rộng .sh chứa một chuỗi lệnh shell
  • Mọi script đều bắt đầu với dòng shebang: #!/bin/bash
  • Tạo tệp, thêm lệnh và chạy bằng bash script.sh, hoặc cấp quyền thực thi bằng chmod +x script.sh và chạy như ./script.sh
  • Bash hỗ trợ biến, nhập liệu từ người dùng, hàm, vòng lặp (for/while) và điều kiện (if/else)
  • Các trường hợp sử dụng phổ biến: tự động hóa tác vụ, thao tác tệp, quản trị hệ thống và pipeline CI/CD

Nhập môn Shell Scripting

Shell scripting là phần quan trọng khi giao tiếp với hệ điều hành của máy tính, và là kỹ năng giá trị cho cả nhà phát triển, quản trị hệ thống và kỹ sư dữ liệu. Ở đây, scripting đề cập đến một chuỗi lệnh shell và hệ điều hành được viết rồi lưu trong tệp: các thao tác điển hình mà shell script thực hiện bao gồm thao tác tệp, thực thi chương trình và in văn bản.

Học cách thực hiện quy trình đơn giản này có thể giúp nhà phát triển tiết kiệm đáng kể thời gian vì một số lệnh sẽ không phải gõ lặp lại thủ công – thậm chí có thể lên lịch để script chạy tự động.

Có nhiều shell khác nhau dành cho người dùng Unix và Linux. Trong phần còn lại của hướng dẫn này, chúng ta sẽ tập trung cụ thể vào Bourne Again SHell (bash), phiên bản nâng cao của Bourne shell và là một trong những giao diện dòng lệnh phổ biến nhất cho các hệ điều hành dựa trên Unix (bao gồm Linux).

Mới làm quen với dòng lệnh? Hãy bắt đầu với khóa học Introduction to Shell để xây dựng nền tảng trước khi đi sâu vào bash scripting.

Bash Script là gì?

Bash là một giao diện dòng lệnh Unix chịu trách nhiệm tương tác với hệ điều hành của máy tính. Tương tự như cách kịch bản phim hướng dẫn diễn viên thực hiện hành động, bash script cho bash shell biết cần làm gì. Vì vậy, bash script là cách hữu ích để nhóm các lệnh thành một chương trình.

Bất kỳ lệnh nào bạn có thể chạy trực tiếp từ dòng lệnh đều có thể đưa vào bash script, và bạn có thể kỳ vọng nó thực hiện đúng như khi chạy từ dòng lệnh. Ngược lại, bất kỳ lệnh nào bạn nhập trong bash script cũng có thể được chạy trực tiếp từ dòng lệnh và cho kết quả giống nhau. Nói cách khác, nếu bạn biết cách tương tác với máy tính qua dòng lệnh, bạn đã biết khá nhiều về bash scripting.

Một trong những khác biệt chính là bash script là tệp văn bản thuần, theo quy ước được lưu với phần mở rộng .sh (chúng vẫn có thể chạy ngay cả khi không có phần mở rộng .sh).

Một điểm khác của bash script là “shebang” xuất hiện ở dòng đầu tiên của mọi script. Về cơ bản, shebang là đường dẫn tuyệt đối tới trình thông dịch bash, gồm ký tự “#” và dấu chấm than “!” theo sau là đường dẫn tới bash shell. Nó dùng để cho hệ điều hành Linux biết nên dùng trình thông dịch nào để phân tích tệp.

Yêu cầu tiên quyết

Trước khi theo dõi hướng dẫn này, tôi khuyến nghị bạn có:

  • Một hệ điều hành dựa trên Unix (Linux hoặc macOS), hoặc Windows có cài đặt Git Bash hoặc Windows Subsystem for Linux (WSL)
  • Hiểu biết cơ bản về cách điều hướng terminal (mở terminal, liệt kê tệp với ls, chuyển thư mục với cd)
  • Một trình soạn thảo văn bản như nano, vim, hoặc VS Code để viết nội dung script

Cách viết Bash Script

Chúng ta sẽ xây dựng ví dụ bash script “Hello World” đơn giản để bạn bắt đầu với bash scripting. Nếu muốn tìm hiểu sâu hơn, hãy xem khóa học Introduction to Bash Scripting. 

Bước 1: Tạo tệp văn bản thuần mới 

Bước đầu tiên là tạo một tệp văn bản thuần mới với phần mở rộng .sh. Trên Linux hoặc macOS, chạy lệnh sau từ terminal:

touch hello_world.sh

Trên Windows, bạn có thể dùng Git Bash hoặc Windows Subsystem for Linux (WSL) — cả hai đều hỗ trợ lệnh touch giống nhau. Ngoài ra, tạo tệp trong bất kỳ trình soạn thảo văn bản nào (VS Code, Notepad, nano) và lưu với phần mở rộng .sh.

Bước 2: Chỉ định trình thông dịch

Ở dòng đầu tiên của script, chúng ta phải chỉ định trình thông dịch dùng để phân tích script. Trong trường hợp này là Bash. Do đó, chúng ta phải đặt shebang ở dòng đầu tiên của script. 

#!/bin/bash

Bước 3: Triển khai lệnh

Mục đích của bash script của chúng ta là in ra “Hello World!” Để thực hiện, chuyển sang dòng mới và dùng lệnh echo theo sau là chuỗi cần in.

echo "Hello World!" 

Khi hoàn tất, lưu tệp và mở Git Bash.  

Lưu ý: Bạn có thể tải Git Bash từ Git downloads. Chỉ cần chọn phiên bản Git tương ứng với hệ điều hành của bạn. 

Tiếp theo, chạy lệnh sau: 

bash hello_world.sh

Lệnh này sẽ xuất “Hello World!” như trong Hình 1. 

Gọi bash script trả về “Hello World!” trong terminal.

Hình 1: Kết quả đầu ra của Bash script

Bước 4: Cấp quyền thực thi cho script

Thay vì luôn thêm tiền tố bash khi chạy script, bạn có thể biến script thành tệp thực thi trực tiếp bằng chmod:

chmod +x hello_world.sh
./hello_world.sh

Lệnh chmod +x cấp quyền thực thi cho tệp. Tiền tố ./ cho shell biết chạy script từ thư mục hiện tại. Đây là cách tiêu chuẩn để phân phối và chạy bash script trong môi trường sản xuất — hầu hết script bạn gặp sẽ được chạy theo cách này.

Cách nhận dữ liệu nhập từ người dùng trong Bash Script

Bây giờ bạn đã biết cách viết script “Hello World!” đơn giản. Hãy xem cách dùng bash để viết các script cần nhập liệu từ người dùng. Trong ví dụ này, chúng ta sẽ tạo bộ gợi ý hoạt động, yêu cầu người dùng nhập tên rồi chọn ngẫu nhiên một hoạt động để mời người dùng tham gia từ một mảng hoạt động. 

Các bước tạo tệp giống như trong phần Cách viết Bash Script – điểm khác nằm ở các lệnh chúng ta nhập vào bash script. 

  1. Tạo tệp văn bản thuần mới từ terminal.
touch generate-activity.sh
  1. Chỉ định trình thông dịch bash bằng cách nhập shebang ở dòng đầu tiên của script.
#!/bin/bash
  1. Viết các lệnh để chạy script rồi lưu tệp.

Giờ đây khi gọi bash script từ terminal, chúng ta sẽ thấy đầu ra như trong Hình 2. 

#!/bin/bash

# Greet user and request their name
echo "The activity generator"
read -p "What is your name? " name

# Create an array of activities
activity[0]="Football"
activity[1]="Table Tennis"
activity[2]="8 Ball Pool"
activity[3]="PS5"
activity[4]="Blackjack"

array_length=${#activity[@]} # Store the length of the array
index=$(($RANDOM % $array_length)) # Randomly select an index from 0 to array_length

# Invite the user to join you participate in an activity
echo "Hi" $name, "would you like to play" ${activity[$index]}"?"
read -p "Answer: " answer

Minh họa script generate-activityshHình 2: Minh họa script generate-activity.sh.

Làm việc với biến trong Bash Script

Biến lưu trữ dữ liệu có thể được tham chiếu và tái sử dụng xuyên suốt script. Để định nghĩa biến, gán giá trị mà không có dấu cách quanh dấu =. Truy cập giá trị của biến bằng cách thêm tiền tố $ trước tên:

#!/bin/bash

# Define variables
greeting="Hello"
user_name="Alice"
current_year=$(date +%Y)  # Command substitution

# Use variables
echo "$greeting, $user_name!"
echo "The current year is $current_year."

Các quy tắc chính cho biến bash:

  • Tên biến phân biệt chữ hoa chữ thường: name và NAME là hai biến khác nhau
  • Không có dấu cách quanh dấu = khi gán giá trị
  • Dùng $(command) để thay thế lệnh, giúp lấy đầu ra của lệnh vào biến
  • Bọc biến trong dấu ngoặc kép ("$var") để xử lý an toàn các giá trị có chứa dấu cách

Cách tạo hàm trong Bash Script

Trong lập trình, hàm được dùng để gom một tập hợp chỉ dẫn lặp lại — tìm hiểu thêm về Hàm trong Python. Mục đích viết hàm là tránh phải lặp lại cùng một đoạn mã, đồng thời giúp mã của bạn dễ đọc hơn. 

Một hàm bash có thể được coi như hàm thông thường: một tập lệnh có thể được gọi nhiều lần. Tuy nhiên, hàm bash bị hạn chế hơn đôi chút so với đa số ngôn ngữ lập trình (ví dụ, hàm bash không cho phép trả về giá trị khi được gọi). 

Trước khi tạo bash script dùng hàm, hãy xem cú pháp khai báo hàm bash. Ta có thể định nghĩa hàm bằng cách viết tên hàm, theo sau là cặp ngoặc đơn và dấu ngoặc nhọn cho thân hàm – đây là cách phổ biến nhất để viết hàm bash. Mã minh họa như sau: 

# Most common way to write a bash function.
example_function () {
  commands
}

Cách khác để viết hàm bash là bắt đầu dòng với từ khóa dự trữ function của bash, sau đó là tên hàm và dấu ngoặc nhọn cho thân hàm – không cần ngoặc đơn. 

# Another way to write a bash function.
function example_function {
  commands
}

Chỉ định nghĩa hàm sẽ không thực thi các lệnh. Để gọi hàm bash, bạn phải gọi tên hàm như sau: 

#!/bin/bash

# A hello world bash function
hello_world () {
  echo "Hello World!"
}

# Invoking the hello_world function
hello_world

Ở trên, chúng ta tạo hàm hello_world in ra “Hello World!” khi bash script chạy.

Truyền đối số vào hàm bash

Đối số là các biến dùng trong một hàm cụ thể. Trong bash, chúng ta không truyền đối số cho hàm theo cách của các ngôn ngữ bậc cao như Python, Julia, v.v. Thay vào đó, hàm bash có bộ đối số dòng lệnh riêng và ta có thể truyền tham số cho hàm bằng cách đặt chúng sau lời gọi tên hàm – cách nhau bằng dấu cách nếu có nhiều đối số.

Về bản chất, đối số hàm được xử lý như tham số vị trí và các biến shell ($1, $2, ..., $n) được dùng để truy cập các đối số truyền vào hàm. 

#!/bin/bash
greet () {
  echo "Hello $1 $2"
}

greet "John" "Doe" 

Trong bash script trên, chúng ta truyền hai đối số, John và Doe, vào hàm greet. Khi chạy script, bạn sẽ thấy đầu ra sau:

Hello John Doe

Sử dụng vòng lặp trong Bash Script

Vòng lặp cho phép bạn lặp lại một khối lệnh nhiều lần. Bash hỗ trợ vòng lặp for và while.

Vòng lặp for

Vòng lặp for lặp qua một danh sách phần tử hoặc một khoảng số:

#!/bin/bash

# Loop over a list
for fruit in apple banana cherry; do
  echo "I like $fruit"
done

# Loop over a numeric range
for number in {1..5}; do
  echo "Number: $number"
done

Vòng lặp while

Vòng lặp while chạy miễn là điều kiện của nó đánh giá là đúng:

#!/bin/bash

count=1
while [ $count -le 5 ]; do
  echo "Count: $count"
  count=$((count + 1))
done

Viết câu lệnh “If” trong Bash

“If” là các câu lệnh điều kiện dùng trong ngôn ngữ lập trình. Nếu một mệnh đề đúng, thì một điều kiện sẽ chạy. Chức năng này cho phép chúng ta xác định trong những trường hợp nào một đoạn mã nhất định sẽ được thực thi. 

Trong bash, chúng ta bắt đầu điều kiện với if và kết thúc bằng fi (if viết ngược). Dưới đây là ví dụ bash script với các điều kiện if: 

#!/bin/bash

read -p "Give me a number: " number
if [ $number -gt 10 ];
then
  echo "Your number is greater than 10."
fi

Trong bash script trên, người dùng được yêu cầu cung cấp một số. Nếu số do người dùng nhập lớn hơn 10, thì “Your number is greater than 10” sẽ được in ra terminal, còn nếu không, chương trình sẽ kết thúc. Hình 3 minh họa ví dụ nhập số lớn hơn 10. 

Sử dụng câu lệnh if trong Bash scripts

Hình 3: Sử dụng câu lệnh “if” trong Bash scripts

Kết luận

Bash scripting là kỹ năng mạnh mẽ để tự động hóa tác vụ, quản lý hệ thống và xây dựng pipeline dữ liệu. Trong hướng dẫn này, tôi đã trình bày các khối xây dựng cốt lõi: dòng shebang, tạo và chạy script, nhận dữ liệu nhập từ người dùng, làm việc với biến, vòng lặp, hàm và điều kiện.

Để tiếp tục hành trình bash scripting, hãy khám phá các bước tiếp theo:

  • Học khóa Introduction to Bash Scripting để nâng cao kỹ năng với bài tập thực hành
  • Tìm hiểu cách lên lịch chạy script tự động bằng cron
  • Khám phá xử lý chuỗi, I/O tệp và xử lý lỗi với mã thoát (exit code)
  • Luyện tập với các script tự động hóa thực tế: sao lưu, xoay vòng log và kiểm tra sức khỏe hệ thống
  • Để nâng kỹ năng lên cấp độ tiếp theo, tôi khuyến nghị học khóa Data Processing in Shell

Câu hỏi thường gặp về Bash Scripting

Bash script là gì?

Bash script là tệp văn bản thuần chứa một chuỗi lệnh để Bash shell thực thi. Theo quy ước, bash script được lưu với phần mở rộng .sh và bắt đầu bằng dòng shebang (#!/bin/bash) để cho hệ điều hành biết nên dùng trình thông dịch nào. Script được dùng để tự động hóa tác vụ lặp lại, quản lý tệp, chạy chương trình và thực hiện quản trị hệ thống.

Tôi chạy bash script như thế nào?

Có hai cách để chạy bash script:

  • Dùng lệnh bash: bash script.sh — chạy trực tiếp script mà không cần quyền thực thi
  • Biến nó thành tệp thực thi: Chạy chmod +x script.sh một lần để cấp quyền thực thi, sau đó chạy với ./script.sh

Cách thứ hai là phương pháp tiêu chuẩn để phân phối và chạy script trong môi trường sản xuất.

Dòng shebang trong bash script là gì?

Shebang (#!/bin/bash) là dòng đầu tiên của bash script. Nó cho hệ điều hành biết trình thông dịch nào sẽ được dùng để thực thi tệp. Ký tự #! ("hash-bang") được theo sau bởi đường dẫn tuyệt đối đến trình thông dịch Bash (/bin/bash). Không có shebang, script của bạn có thể vẫn chạy nhưng sẽ dùng shell đang hoạt động, dẫn đến hành vi không nhất quán giữa các hệ thống.

Sự khác nhau giữa bash và shell scripting là gì?

Shell scripting là thuật ngữ chung cho việc viết script chạy trong bất kỳ shell Unix nào (sh, bash, zsh, ksh, v.v.). Bash scripting đề cập cụ thể đến các script viết cho Bash shell (Bourne Again SHell). Bash là shell mặc định trên hầu hết hệ thống Linux và mở rộng chuẩn POSIX shell với các tính năng như mảng, mở rộng số học và thao tác chuỗi nâng cao. Khi mọi người nói "shell scripting," họ thường ám chỉ bash scripting.

Tôi khai báo và sử dụng biến trong bash script như thế nào?

Khai báo biến bằng cách gán giá trị mà không có dấu cách quanh dấu =, sau đó truy cập giá trị bằng cách thêm tiền tố $ trước tên:

name="Alice"
echo "Hello, $name!"

Các quy tắc chính: tên biến phân biệt chữ hoa chữ thường, không có dấu cách quanh =, và bọc biến trong dấu ngoặc kép ("$var") khi giá trị có thể chứa dấu cách. Dùng $(command) để thay thế lệnh và lưu đầu ra của lệnh vào biến.

Chủ đề

Liên quan