Bài viết giải thích dùng function trong script Bash – giúp tái dùng code và đơn giản hóa script.
Tại sao viết code nhiều lần khi có thể viết một lần và tái dùng?
Đó là việc function cho phép.
Bài viết रूपरेखा sử dụng function trong Bash/Shell script.
Function là gì?
Function là đoạn code tái sử dụng. Function chấp nhận tham số (parameters), cho phép thực hiện cùng hành động lặp lại trên input khác nhau.
Function thường thực hiện hành động, in kết quả, hoặc trả về giá trị dùng sau.
Tại sao dùng Function?
Ví dụ, script gửi email thông báo sự kiện. Muốn gửi nhiều email khác nhau cho nhiều người, có thể viết code gửi email nhiều lần trong script.
Dùng function, viết code một lần, gọi với người nhận, chủ đề, nội dung khác nhau, chỉ một dòng gọi function thay vì code trùng lặp.
Cú pháp Function Bash
ten_function () { # LENH # Giá trị trả về tùy chọn } Lưu ý:
- ten_function tên dùng để gọi function
- Chỉ ký tự alphanumeric và underscore!
- Tên function phải theo sau () (ngoặc đơn)
- Chú ý khoảng trắng quanh ngoặc! Bắt buộc!
- Code function phải bọc trong {} (ngoặc nhọn)
- Code ngoài ngoặc nhọn KHÔNG thuộc function và KHÔNG chạy.
- LENH là bất kỳ lệnh nào thường dùng trên Linux
- Có thể return giá trị – xem ví dụ dưới
- Để thoát function sớm, gọi return không giá trị
- Biến đặc biệt $? giữ giá trị return từ lệnh cuối cùng, dùng được sau khi function chạy xong
Ví dụ & Giải thích
Ví dụ minh họa mọi yếu tố Bash function – có comment giải thích.
#!/bin/bash # Biến toàn cục - dùng đâu cũng được vì không định nghĩa trong function/loop initial_value=3 # Function làm toán học my_math_function () { # Lấy tham số truyền vào function # Tham số truyền sau tên function khi gọi, đặt tên theo thứ tự $1, $2... # Dưới gán tham số cho biến local - chỉ dùng trong function - cho dễ hiểu local multiplier_value=$1 local addition_value=$2 # Tính kết quả gán cho biến local # Chú ý $(( )) bọc phép tính - báo script gán KẾT QUẢ phép tính cho result, không phải gán chuỗi phép tính local result=$(( $initial_value * $multiplier_value + $addition_value )) # In kết quả ra console # Tùy cách dùng function, output text từ function dùng đọc kết quả echo $result # Cũng có thể lấy output qua return value return $result } # Gọi function với tham số khác nhau # Tham số truyền bằng cách gõ sau function cách nhau space # Function trên cần 2 tham số - multiplier_value và addition_value my_math_function 2 4 # Output 10 (2 * 3 + 4) my_math_function 3 5 # Output 14 (3 * 3 + 5) # $? biến đặc biệt Bash luôn giữ return value lệnh cuối chạy # Dùng lấy giá trị return từ function echo $? # Output 14 # Gán kết quả function vào biến # Gán output text của function (ví dụ echo) vào biến my_result=$(my_math_function 6 7) echo $my_result # Output 25 (6 * 3 + 7) Xem thêm về #! trong script Linux tại đây!
Muốn truyền giá trị cho shell script (rồi truyền cho function trong script)? Xem bài này.