Android

Hàm Bash

'Birthday Bash' FULL SONG with LYRICS | Yo Yo Honey Singh, Alfaaz | Dilliwaali Zaalim Girlfriend

'Birthday Bash' FULL SONG with LYRICS | Yo Yo Honey Singh, Alfaaz | Dilliwaali Zaalim Girlfriend

Mục lục:

Anonim

Hàm Bash về cơ bản là một tập hợp các lệnh có thể được gọi nhiều lần. Mục đích của một chức năng là giúp bạn làm cho các tập lệnh bash của bạn dễ đọc hơn và để tránh viết cùng một mã nhiều lần.

So với hầu hết các ngôn ngữ lập trình, các hàm Bash có phần hạn chế. Trong hướng dẫn này, chúng tôi sẽ trình bày những điều cơ bản về các hàm Bash và chỉ cho bạn cách sử dụng chúng trong các tập lệnh shell của bạn.

Tuyên bố hàm Bash

Cú pháp khai báo hàm bash rất đơn giản. Chúng có thể được khai báo theo hai định dạng khác nhau:

  1. Định dạng đầu tiên bắt đầu bằng tên hàm, theo sau là dấu ngoặc đơn. Đây là định dạng ưa thích và được sử dụng nhiều hơn.

    function_name () { commands }

    Phiên bản đơn dòng:

    function_name () { commands; }

    Định dạng thứ hai bắt đầu với từ dành riêng cho function theo sau là tên hàm.

    function function_name { commands }

    Phiên bản đơn dòng:

    function function_name { commands; }

Một số điểm cần lưu ý:

  • Danh sách lệnh giữa các dấu ngoặc nhọn {} là phần thân của hàm. Các dấu ngoặc nhọn bao quanh thân hàm phải được tách biệt khỏi thân bằng khoảng trắng hoặc dòng mới. Xác định hàm không thực hiện nó. Để gọi hàm bash, chỉ cần sử dụng tên hàm. Các lệnh giữa các dấu ngoặc nhọn được thực thi bất cứ khi nào hàm được gọi trong tập lệnh shell. Định nghĩa hàm phải được đặt trước bất kỳ lệnh gọi nào đến hàm. Khi sử dụng các hàm đơn giản, nén một dòng phải tuân theo lệnh cuối cùng trong hàm. Bạn nên luôn cố gắng giữ tên mô tả của mình.

Để hiểu rõ hơn về điều này, hãy xem ví dụ sau:

~ / xin chào.world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Hãy phân tích từng dòng mã:

  • Trong dòng 3 chúng ta sẽ xác định hàm bằng cách đặt tên cho nó và mở dấu ngoặc nhọn { đánh dấu sự bắt đầu của thân hàm.ine 4 là thân hàm. Phần thân hàm có thể chứa nhiều lệnh và khai báo biến.ine 5 , dấu ngoặc nhọn đóng } , xác định phần cuối của hàm hello_world dòng 7 chúng ta đang thực thi hàm. Bạn có thể thực thi chức năng nhiều lần bạn cần.

Nếu bạn chạy tập lệnh, nó sẽ in hello, world .

Phạm vi biến

Biến toàn cục là các biến có thể được truy cập từ bất kỳ đâu trong tập lệnh bất kể phạm vi. Trong Bash, tất cả các biến theo mặc định được định nghĩa là toàn cục, ngay cả khi được khai báo bên trong hàm.

Các biến cục bộ có thể được khai báo trong thân hàm với từ khóa local và chỉ có thể được sử dụng bên trong hàm đó. Bạn có thể có các biến cục bộ có cùng tên trong các hàm khác nhau.

Để minh họa rõ hơn cách phạm vi biến hoạt động trong Bash, hãy xem xét một ví dụ:

~ / biến_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

Kịch bản bắt đầu bằng cách xác định hai biến toàn cục var1 var2 . Sau đó, một hàm đặt biến cục bộ var1 và sửa đổi biến toàn cục var2 .

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

Từ đầu ra ở trên, chúng ta có thể kết luận rằng:

  • Nếu bạn đặt một biến cục bộ bên trong thân hàm có cùng tên với một biến toàn cục hiện có, thì nó sẽ được ưu tiên hơn biến toàn cục. Biến toàn phần có thể được thay đổi từ bên trong hàm.

Giá trị trả về

Không giống như các hàm trong các ngôn ngữ lập trình của Real real, các hàm Bash không cho phép bạn trả về một giá trị khi được gọi. Khi hàm bash hoàn thành, giá trị trả về của nó là trạng thái của câu lệnh cuối cùng được thực thi trong hàm, 0 cho thành công và số thập phân khác không trong phạm vi 1 - 255 cho thất bại.

Trạng thái trả về có thể được chỉ định bằng cách sử dụng từ khóa return và nó được gán cho biến $? . Câu lệnh return kết thúc hàm. Bạn có thể coi nó là trạng thái thoát của hàm.

~ / return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Để thực sự trả về một giá trị tùy ý từ một hàm, chúng ta cần sử dụng các phương thức khác. Tùy chọn đơn giản nhất là gán kết quả của hàm cho biến toàn cục:

~ / return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Một tùy chọn khác, tốt hơn để trả về giá trị từ hàm là gửi giá trị đến stdout bằng echo hoặc printf như hiển thị bên dưới:

~ / return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

Thay vì chỉ thực hiện chức năng sẽ in thông báo ra thiết bị xuất chuẩn, chúng tôi đang gán đầu ra chức năng cho biến func_result bằng cách sử dụng thay thế lệnh $() . Biến sau này có thể được sử dụng khi cần thiết.

Truyền các đối số cho các hàm Bash

Để chuyển bất kỳ số lượng đối số nào cho hàm bash, chỉ cần đặt chúng ngay sau tên của hàm, cách nhau bằng khoảng trắng. Đó là một thực tiễn tốt để trích dẫn hai lần các đối số để tránh hiểu sai về một đối số có khoảng trắng trong đó.

  • Các tham số được truyền là $1 , $2 , $3 , $3 , tương ứng với vị trí của tham số sau tên của hàm. Biến $0 được dành riêng cho tên của hàm. Biến $# giữ số lượng tham số / đối số vị trí được truyền cho Các hàm $* $@ giữ tất cả các tham số / đối số vị trí được truyền cho hàm.
    • Khi trích dẫn kép, "$*" mở rộng thành một chuỗi được phân tách bằng dấu cách (ký tự đầu tiên của IFS) - "$1 $2 $n" . Khi được trích dẫn gấp đôi, "$@" sẽ mở rộng thành các chuỗi riêng biệt - "$1" "$2" "$n" . Khi không được trích dẫn gấp đôi, $* $@ là như nhau.

Đây là một ví dụ:

~ / Pass_argument.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Phần kết luận

Hàm Bash là một khối mã có thể tái sử dụng được thiết kế để thực hiện một hoạt động cụ thể. Sau khi xác định, hàm có thể được gọi nhiều lần trong một tập lệnh.

Bạn cũng có thể muốn đọc về cách sử dụng hàm Bash để tạo một lệnh tắt dễ nhớ cho lệnh dài hơn.

thiết bị đầu cuối bash