Giảm 50% tất cả các gói, thời gian có hạn. Bắt đầu từ $2.48/mo
11 phút còn lại
Máy chủ & Hệ điều hành

Bash Functions Giải Thích: Cú Pháp, Ví Dụ và Trường Hợp Sử Dụng

Kelly Watson By Kelly Watson 11 phút đọc Cập nhật 14 tháng 12, 2025
Hình minh họa 3D trừu tượng của các khối mã phát sáng xanh lắp ráp thành cấu trúc mô-đun, đại diện cho các hàm Bash.

Bash functions nhóm các lệnh liên quan dưới một tên duy nhất. Khi bạn gọi tên đó, toàn bộ khối lệnh thực thi. Bạn có thể truyền arguments để tùy chỉnh hành vi và trả về values để truyền đạt kết quả. Điều này giữ code của bạn sạch sẽ và dễ bảo trì.

Linux chiếm ưu thế trong các môi trường server toàn cầu, vì vậy nắm vững Bash functions hiện rất quan trọng. Functions biến các script lộn xộn thành công cụ tự động hoá sạch sẽ và tái sử dụng được.

Hướng dẫn này sẽ đưa bạn từ cú pháp cơ bản đến các trường hợp sử dụng nâng cao. Bạn sẽ học cách khai báo functions, truyền parameters, xử lý return values, và xem mười ví dụ thực tế mà bạn có thể sử dụng trong các script của riêng mình.

Tóm tắt nhanh

  • Bash functions là các khối code được đặt tên mà bạn có thể tái sử dụng trong toàn bộ scripts
  • Định nghĩa functions bằng cách sử dụng function_name() { commands; } cú pháp
  • Truyền arguments bằng cách sử dụng $1, $2, $3 tham số vị trí
  • Functions cải thiện khả năng đọc code, tính mô-đun hoá, và bảo trì
  • Sử dụng return để thoát khỏi functions và truyền đạt status codes (0 = thành công, non-zero = lỗi)
  • Functions có thể được chia sẻ giữa các scripts bằng cách sử dụng source or export -f
  • Các ví dụ thực tế bao gồm sao lưu tệp, giám sát đĩa, xác thực input, và kiểm tra service

Bash Scripting là Gì?

Hình minh hoạ 3D của một cuộn giấy kỹ thuật số với code Bash phát sáng tự viết, đại diện cho sự tự động hoá của Bash scripting.

Bash scripting là một phương pháp tự động hoá tác vụ bằng Bash shell. Nó đóng vai trò là giao diện dòng lệnh mặc định cho Linux và vẫn là một công cụ tiêu chuẩn trên macOS. Bash script là một chương trình được viết bằng ngôn ngữ Bash scripting, có thể được thực thi trong terminal hoặc dưới dạng một tệp script độc lập.

Với Mức sử dụng Linux desktop tăng dần đều và hệ điều hành này chiếm ưu thế trong các môi trường server trên toàn thế giới, kỹ năng Bash scripting đã trở nên có giá trị cho các chuyên gia IT. Ngôn ngữ này tích hợp tốt với các công cụ DevOps như Docker, Kubernetes, và CI/CD pipelines.

Bash scripting cho phép bạn hoàn thành các tác vụ từ những lệnh đơn giản đến tự động hoá phức tạp và quản lý hệ thống. Bạn có thể tự động hoá các tác vụ lặp đi lặp lại, phát triển các script bảo trì, xây dựng deployment pipelines, quản lý các hệ thống phần mềm, và thao tác dữ liệu.

Bash Function là Gì?

Hình minh hoạ kỹ thuật số tương lai cho thấy dữ liệu dòng lệnh lộn xộn được tổ chức bởi một cổng xử lý phát sáng, tượng trưng cho cách Bash function hoạt động, với không gian trống ở bên trái.

Bash function có thể được định nghĩa là một tập hợp các lệnh được định nghĩa trong Bash script hoặc được đặt interactively tại command prompt, tùy thuộc vào trường hợp sử dụng. Sau khi được định nghĩa, Bash function có thể được gọi nhiều lần trong script hoặc trong các scripts khác, giống như một lệnh shell thông thường.

Bash functions cho phép bạn tạo các khối code tái sử dụng được có thể thực hiện các hoạt động phức tạp, tổ chức code của bạn, và đơn giản hoá các scripts của bạn. Bạn có thể truyền arguments đến Bash function, sau đó sử dụng chúng trong function để thực hiện các hoạt động. Bash functions trả về values mà bạn có thể sử dụng ở những nơi khác trong script của mình.

e sẽ bao gồm một số phong cách triển khai cụ thể, bao gồm simple_function để xử lý logic cơ bản, simple_inputs để xử lý tham số, và các cấu trúc nâng cao như fibonnaci_recursion.

Những kiến thức cơ bản về hàm Bash rất quan trọng đối với bất kỳ quản trị viên hệ thống hay kỹ sư DevOps nào làm việc với tự động hóa. Các phần sau đây đề cập chi tiết đến từng loại hàm này.

Tại sao nên sử dụng hàm Bash?

Hình ảnh bánh răng xanh lam phát sáng với các ký hiệu tối ưu hóa điều khiển một máy mã, thể hiện hiệu suất và tốc độ đạt được bằng cách sử dụng hàm Bash.

Giờ đã hiểu rõ định nghĩa hàm Bash, hãy xem xét những ưu điểm chính của chúng. Phần này giúp bạn hiểu rõ hơn khi nào hàm phát huy tác dụng tốt nhất.

Khả năng tái sử dụng

Bạn tạo một hàm Bash, và bạn có một công cụ mạnh mẽ. Bạn có thể viết một khối mã một lần và tái sử dụng nó nhiều lần trong script của mình hoặc thậm chí trong các script khác.

Điều này làm cho mã của bạn hiệu quả hơn và tiết kiệm thời gian bằng cách loại bỏ việc lặp lại. Bảo trì mã của bạn trở nên đơn giản hơn vì bạn chỉ cần thay đổi hàm ở một nơi.

Khả năng đọc

Script phức tạp có thể khó hiểu. Hàm Bash giải quyết vấn đề này bằng cách chia nhỏ script của bạn thành các phần nhỏ hơn, dễ quản lý hơn.

Mỗi hàm phục vụ một mục đích cụ thể với một tên mô tả giải thích vai trò của nó. Điều này giúp bạn và những người khác hiểu và bảo trì mã dễ dàng hơn.

Tính mô-đun

Hàm sắp xếp mã của bạn theo cấu trúc. Bạn có thể tách logic thành các mô-đun nhỏ hơn, giúp cấu trúc script của bạn gọn gàng và dễ quản lý.

Và nếu bạn cần thêm tính năng mới, bạn có thể làm điều đó mà không cần chạm tới các phần khác của script. Khi cần loại bỏ hoặc sửa đổi chức năng, phần còn lại của script vẫn nguyên vẹn.

Tham số hàm Bash

Bạn có thể truyền các tham số cho hàm của mình. Những tham số này cho phép hàm của bạn thích nghi và thực hiện các hành động khác nhau dựa trên đầu vào mà chúng nhận được.

Điều này mở ra nhiều khả năng trong khi làm cho hàm của bạn linh hoạt và dễ thích nghi hơn. Thay vì viết mã tương tự nhiều lần, bạn viết một hàm xử lý các đầu vào khác nhau.

Cách sử dụng hàm Bash ở đâu và như thế nào?

Biểu đồ dòng kính 3D cho thấy quá trình thực thi script phân nhánh vào khối hàm và trả về, minh họa cách sử dụng hàm Bash trong luồng logic.

Bây giờ, hãy cùng đi vào chi tiết kỹ thuật với định nghĩa của chúng ta và bắt đầu bằng một ví dụ ngắn về cách tạo hàm Bash. Cú pháp sau đây có thể được sử dụng trong các môi trường dựa trên Unix. Nếu bạn làm việc trên Windows, bạn có thể cài đặt Linux Bash trên Windows 10 để theo dõi các ví dụ này.

Tạo hàm Bash

Bắt đầu bằng cách sử dụng cấu trúc lệnh sau:

function_name () {

    # các lệnh đi vào đây

}

 

Sau khi tạo hàm, bạn có thể sử dụng nó trong mã của mình bất kỳ lúc nào. Dưới đây là một ví dụ thực tế:

greet () {

    echo "Xin chào, $1!"

}

 

Gọi hàm này bằng Xin chào Thế giới để xuất ra "Hello, World!" Cái $1 đại diện cho đối số đầu tiên được truyền vào hàm.

Dưới đây là một vài ví dụ thực tế mà bạn có thể dùng trong các script của mình:

# Tạo bản sao lưu của bất kỳ tệp nào

backup_file () {

    cp "$1" "$1.bak"

    echo "Đã tạo bản sao lưu: $1.bak"

}

 

# Kiểm tra xem thư mục có tồn tại không, tạo nếu chưa có

ensure_dir () {

    nếu [ ! -d "$1" ]; thì

        mkdir -p "$1"

        echo "Đã tạo thư mục: $1"

    fi

}

 

# Ghi lại thông báo kèm dấu thời gian

log_message () {

    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"

}

 

Bạn định nghĩa các hàm Bash tùy chỉnh này một lần rồi gọi chúng bất cứ khi nào cần trong script của mình.

Các Yếu Tố Cơ Bản về Cú Pháp Hàm

Hàm hoạt động như những script nhỏ bên trong script chính của bạn, nhưng chúng dùng chung bộ nhớ của shell. Hãy ghi nhớ ba hành vi cụ thể này khi viết chúng.

Phạm Vi Biến (Cục Bộ vs. Toàn Cục)

Các biến bên trong hàm là toàn cục theo mặc định. Nếu bạn định nghĩa my_var="test" bên trong một hàm, nó sẽ ghi đè bất kỳ my_var nào hiện có trong script của bạn. Luôn dùng local để giới hạn biến trong hàm nhằm tránh tác động không mong muốn:

local my_var="value"

Tham số vị trí

Hàm đọc đối số bằng cách dùng cùng một $1, $2, và $@ biến như trong script. Những biến này chỉ tồn tại cục bộ trong hàm và sẽ bị đặt lại khi hàm thoát. Các đối số ban đầu của script không thể truy cập được bên trong hàm trừ khi bạn truyền chúng vào một cách rõ ràng.

Giá Trị Trả Về

Các hàm Bash không trả về dữ liệu như Python hay JavaScript. Lệnh return chỉ đặt mã thoát (0-255) để chỉ thị thành công hay thất bại. Để trả về dữ liệu thực tế (như chuỗi hay kết quả tính toán), echo kết quả và bắt nó khi gọi hàm:

result=$(my_function)

10 Ví Dụ Hàm Bash Hữu Ích Nhất

Bây giờ bạn đã hiểu hàm Bash và cách tạo chúng, dưới đây là mười ví dụ thực tế mà bạn có thể thêm vào script của mình. Mỗi hàm giải quyết một vấn đề phổ biến và minh họa cấu trúc, đối số, và giá trị trả về đúng cách.

1. Hàm Sao Lưu Tệp

Tạo bản sao lưu có dấu thời gian của bất kỳ tệp nào:

backup_file () {

    tệp cục bộ="$1"

    local backup="${file}.$(date +%Y%m%d_%H%M%S).bak"

    

    nếu [ -f "$file" ]; thì

        cp "$file" "$backup"

        echo "Backup created: $backup"

        return 0

    else

        echo "Error: File not found"

        return 1

    fi

}

 

Cách sử dụng: backup_file /etc/nginx/nginx.conf

2. Công cụ Kiểm tra Thư mục

Kiểm tra xem thư mục có tồn tại và tạo nó nếu cần:

ensure_dir () {

    địa phương dir="$1"

    

    nếu [ ! -d "$dir" ]; thì

        mkdir -p "$dir"

        echo "Created: $dir"

    fi

}

 

Cách sử dụng: ensure_dir /var/log/myapp

3. Trình ghi nhật ký có dấu thời gian

Thêm dấu thời gian vào các tin nhắn nhật ký để gỡ lỗi:

log_message () {

    cấp độ địa phương="$1"

    local message="$2"

    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message"

}

 

Cách sử dụng: log_message "INFO" "Script started"

4. Giám sát dung lượng đĩa

Kiểm tra mức sử dụng đĩa và cảnh báo nếu vượt quá ngưỡng:

check_disk_space () {

    ngưỡng cục bộ="${1:-80}"

    local usage=$(df / | tail -1 | awk '{print $5}' | tr -d '%')

    

    if [ "$usage" -gt "$threshold" ]; then

        echo "Warning: Disk usage at ${usage}%"

        return 1

    fi

    return 0

}

 

Cách sử dụng: check_disk_space 90

5. Trình Xác Thực Đầu Vào

Xác minh rằng dữ liệu nhập từ người dùng không trống:

validate_input () {

    đầu vào cục bộ="$1"

    tên địa phương="$2"

    

    nếu [ -z "$input" ]; thì

        echo "Error: $name cannot be empty"

        return 1

    fi

    return 0

}

 

Cách sử dụng: validate_input "$username" "Tên người dùng"

6. Trình kiểm tra trạng thái dịch vụ

Kiểm tra xem dịch vụ có đang chạy và báo cáo trạng thái:

check_service () {

    dịch vụ địa phương="$1"

    

    if systemctl is-active –quiet "$service"; then

        echo "$service is running"

        return 0

    else

        echo "$service is not running"

        return 1

    fi

}

 

Cách sử dụng: check_service nginx

7. Công cụ trích xuất phần mở rộng tệp

Trích xuất phần mở rộng từ tên tệp:

get_extension () {

    tên tệp cục bộ="$1"

    echo "${filename##*.}"

}

 

Cách sử dụng: ext=$(get_extension "document.pdf")

8. Công cụ cắt cỏ dây

Loại bỏ khoảng trắng ở đầu và cuối chuỗi:

trim_string () {

    local str="$1"

    str="${str#"${str%%[![:space:]]*}"}"

    str="${str%"${str##*[![:space:]]}"}"

    echo "$str"

}

 

Cách sử dụng: clean=$(trim_string " hello world ")

9. Công cụ Lưu trữ File An toàn

Di chuyển file đến thư mục $HOME/.trash tùy chỉnh thay vì xóa vĩnh viễn. Nó thêm timestamp vào tên file để tránh ghi đè các bản sao lưu trước đó.

safe_remove() {

    tệp cục bộ="$1"

    local trash="$HOME/.trash"

    # Thêm timestamp để tránh ghi đè file hiện có

    local new_name="$(basename "$file")_$(date +%s)"

    

    mkdir -p "$trash"

 

    if [ -e "$file" ]; then

        mv "$file" "$trash/$new_name"

        echo "Đã di chuyển đến lưu trữ: $file -> $trash/$new_name"

    else

        echo "Lỗi: không tìm thấy $file"

        return 1

    fi

}

 

Cách sử dụng: safe_remove old_script.sh

 

10. Người báo cáo trạng thái

Minh họa cơ chế trả về giá trị của hàm Bash để xử lý lỗi. Giá trị trả về của hàm Bash cho biết thành công (0) hoặc thất bại (khác 0):

process_data () {

    tệp cục bộ="$1"

    

    nếu [ ! -f "$file" ]; thì

        return 1

    fi

    

    # Xử lý file

    cat "$file" | wc -l

    return 0

}

 

# Kiểm tra giá trị trả về

process_data "data.txt"

if [ $? -eq 0 ]; then

    echo "Xử lý hoàn tất"

else

    echo "Xử lý thất bại"

fi

 

Cái $? variable ghi lại trạng thái thoát từ lệnh hoặc hàm được gọi gần nhất.

Hàm Mục đích Tính năng chính
backup_file Tạo bản sao lưu file Đặt tên có dấu thời gian
ensure_dir Quản lý thư mục Tạo nếu không có
log_message Đăng nhập Tiền tố dấu thời gian
check_disk_space Giám sát hệ thống Cảnh báo ngưỡng
validate_input Xác thực đầu vào Kiểm tra chuỗi rỗng
check_service Giám sát dịch vụ Tích hợp Systemd
get_extension Phân tích chuỗi Mở rộng tham số
trim_string Dọn dẹp chuỗi Loại bỏ khoảng trắng
safe_remove Xóa an toàn Thư mục Rác
process_data Xử lý lỗi Giá trị trả về

Chạy Hàm Bash trên VPS

Hàm Bash phát huy sức mạnh khi chạy trong môi trường máy chủ chuyên dụng. Linux VPS cấp cho bạn quyền truy cập root đầy đủ để tùy chỉnh môi trường shell, tạo thư viện hàm toàn hệ thống và tự động hóa các tác vụ quản lý máy chủ mà không có giới hạn.

Với VPS, bạn có thể lưu trữ các hàm tái sử dụng trong /etc/profile.d/ cho tất cả người dùng, lên lịch các script dựa trên hàm thông qua cron jobs và xây dựng các pipeline tự động hóa cho triển khai và bảo trì. Chúng tôi cung cấp máy chủ trên 12 vị trí toàn cầu với tốc độ mạng lên tới 40 Gbps và bộ nhớ DDR5, nghĩa là thực thi script nhanh hơn và xử lý dữ liệu mượt mà hơn.

Mức độ kiểm soát này làm cho VPS lý tưởng cho bất kỳ ai nghiêm túc với shell scripting và tự động hóa hệ thống.

Kết luận

Các hàm Bash là yếu tố then chốt để tạo ra những script mô-đun và tái sử dụng được. Chúng cho phép bạn nhóm các lệnh liên quan và đóng gói logic phức tạp, giúp code dễ đọc và dễ bảo trì hơn. Nếu bạn đang quản lý cơ sở hạ tầng đám mây, tự động hóa quy trình triển khai hay xử lý các tác vụ quản trị hệ thống thường xuyên, hàm sẽ giúp script của bạn luôn có tổ chức và hoạt động hiệu quả.

Trong bài viết này, chúng tôi đã đề cập đến những kiến thức cơ bản về hàm Bash, bao gồm cách định nghĩa và gọi hàm, mười ví dụ hàm thực tế, và những trường hợp sử dụng phổ biến để bạn bắt đầu với các dự án tự động hóa riêng.

Kết hợp với các cấu trúc điều khiển như Lệnh if trong Bash, hàm cung cấp cho bạn những khối xây dựng cần thiết cho tự động hóa mạnh mẽ. Bằng cách sử dụng hàm Bash trong script, bạn có thể viết code sạch hơn, mô-đun hơn và dễ hiểu cũng như dễ bảo trì hơn.

Câu hỏi thường gặp

Hàm Bash có thể có biến cục bộ không?

Có. Hàm Bash có thể có biến cục bộ bằng cách sử dụng từ khóa local. Điều này giới hạn phạm vi của biến trong hàm, ngăn nó ảnh hưởng đến những biến cùng tên bên ngoài hàm.

Hàm Bash có thể là đệ quy được không?

Có, hàm Bash có thể là đệ quy. Bash có kích thước call stack mặc định tương đối nhỏ, nên tùy thuộc vào những hàm đệ quy bạn có trong tâm trí, bạn có thể cần tăng nó bằng lệnh ulimit -s trước khi thực thi.

Tôi có thể sử dụng hàm Bash trong những script khác không?

Có, bạn có thể chia sẻ hàm Bash giữa các script bằng lệnh source (hoặc viết tắt là .). Bằng cách source một file chứa các định nghĩa hàm của bạn, bạn làm cho những hàm đó khả dụng trong script đang gọi. Với các quá trình con, hãy sử dụng export -f function_name để làm cho hàm có thể truy cập được.

Tôi có thể sử dụng hàm Bash trong pipeline không?

Có, nhưng nó yêu cầu các bước cụ thể đối với các lệnh bên ngoài. Bên trong một script, bạn có thể truyền dữ liệu trực tiếp đến một hàm (ví dụ: cat file | my_function). Tuy nhiên, các lệnh như xargs hoặc find -exec chạy trong một môi trường mới. Để sử dụng hàm ở đó, bạn phải export nó (export -f my_func) rồi gọi Bash một cách rõ ràng (ví dụ: xargs bash -c 'my_func "$@"').

Hàm shell script là gì?

Hàm shell script là một khối code được xác định trong shell script dùng để phục vụ một mục đích cụ thể và có thể được gọi từ nhiều phần khác nhau của script. Hàm mang lại giá trị lớn về mặt tính mô-đun của code, khả năng tái sử dụng tốt hơn và bảo trì dễ dàng hơn. Trong bối cảnh viết kịch bản Bash, các hàm được đóng gói trong toàn bộ script.

Chia sẻ

Bài viết mới từ blog

Tiếp tục đọc.

Những Ứng Dụng Self-Hosted Tốt Nhất Bạn Có Thể Chạy với Cosmos Cloud hình ảnh bìa với các bảng điều khiển ứng dụng xung quanh một bảng điều khiển Cosmos.
Máy chủ & Hệ điều hành

Những Ứng Dụng Self-Hosted Tốt Nhất Bạn Có Thể Chạy với Cosmos Cloud: Tệp, Media, Mật khẩu, Tự động hóa & Hơn nữa!

Sau khi bạn đã thiết lập Cosmos Cloud và muốn xem những ứng dụng nào phù hợp với nó, hoặc có thể bạn chưa quyết định sử dụng Cosmos và chỉ muốn biết nó phù hợp với quy trình làm việc của bạn như thế nào

Nick BạcNick Bạc Đọc trong 16 phút
Portainer so với Cosmos Cloud để Quản lý Ứng Dụng Docker bìa có sơ đồ thiết lập hybrid và khối điều hành so với khối truy cập.
Máy chủ & Hệ điều hành

Portainer so với Cosmos Cloud: Lựa Chọn Tốt Nhất cho Quản Lý Ứng Dụng Docker

Nếu bạn đã biết về Docker và chỉ muốn cách rõ ràng hơn để chạy một stack ứng dụng phát triển, đây là câu trả lời ngắn gọn cho Portainer so với Cosmos Cloud. Portainer là lựa chọn mạnh hơn cho

Nick BạcNick Bạc 14 phút đọc
Cosmos Cloud so với CasaOS so với Umbrel biểu đồ tính năng hiển thị ba đường dẫn self-hosted trong một thế giới mạng đám mây trừu tượng.
Máy chủ & Hệ điều hành

Cosmos Cloud so với CasaOS so với Umbrel: Nền Tảng Self-Hosted Nào Phù Hợp với Thiết Lập của Bạn?

Câu trả lời ngắn gọn là CasaOS vẫn là nơi dễ nhất để bắt đầu, Umbrel có cảm giác được tuyển chọn sạch nhất, và Cosmos Cloud có ý nghĩa hơn khi bạn muốn kiểm soát chặt chẽ hơn đối với

Nick BạcNick Bạc 11 phút đọc

Sẵn sàng triển khai? Từ $2.48/tháng.

Cloud độc lập, hoạt động từ 2008. AMD EPYC, NVMe, 40 Gbps. Hoàn tiền trong 14 ngày.