Bash Shell – Day 7 – Funtion

<< Day6Day 8 >>

Tiếp tục chuỗi bài viết trong 30 ngày tìm hiểu Bash Shell. Nội dung của ngày thứ 7 là tìm hiểu về Function – Hàm trong Bash Shell.

1. Funtion có đối số

Trong helloname.sh:

greet() {
    echo "Hello, $1"
}
greet "$1"

output:

[[email protected] ~]# ./helloname.sh bashshell
Hello, bashshell
[[email protected] ~]# ./helloname.sh "viet nam"
Hello, viet nam
  • Với nhiều đối số Ví dụ 2:
In() {
 echo First Name"$0"
 echo Last Name"$1"
}
In "[email protected]"

Output:

[[email protected] ~]# ./helloname.sh 1 2 a
1 2 a
[[email protected] ~]# ./helloname.sh 1 2 4 5 
1 2 4 5
[[email protected] ~]# ./helloname.sh bash shell 123 987
bash shell 123 987

Ví dụ 3:

In() {
 echo "First Name $1"
 echo "Last Name $2"
}
In "[email protected]"
[[email protected] ~]# ./helloname.sh JONY DANG
First Name JONY
Last Name DANG

Lưu ý: không được vượt quá 9 đối số $10 sẽ không hoạt động, bạn cần làm là sử dụng ${10} Ví dụ 4: Đối với các đối số mặc định, sử dụng ${1:-default_val}

#!/bin/bash
foo() {
 local val=${1:-25}
 echo "$val"
}GoalKicker.com – Bash Notes for Professionals 53
foo
foo 30
foo abc

Nó chỉ lấy 25 là giá trị cho $1 trong function còn lại value động.

2 Function đơn giản

Trong helloname.sh:

greet ()
{
 echo "Hello World!"
}
# Gọi function để thực hiện
greet

Output:

[[email protected] ~]# ./helloname.sh 
Hello World!

Chú ý: Việc sử dụng source cung cấp tên tệp có các hàm làm cho chúng có sẵn trong phiên bash hiện tại của bạn.

[[email protected] ~]#  source helloname.sh 
Hello World!
[[email protected] ~]# greet
Hello World!

Bạn có thể sử dụng export Một function trong một số shells để nó tiếp xúc với các process con.

[[email protected] ~]# bash -c 'greet' 
bash: greet: command not found

export trước khi gọi hàm

[[email protected] ~]# bash -c 'greet' 
Hello World!

3. In định nghĩa hàm

callfunc() {
    declare -f "[email protected]"
}
function func(){
    echo "Đây là một function"
}
funcd="$(callfunc func)"
callfunc func # hoặc  echo "$funcd"

Output:

[[email protected] ~]# ./file1.sh 
func () 
{ 
    echo "Đây là một function"
}

In ra nội dung của một funtion được khởi tạo.

4. Một function chấp nhận các tham số được đặt tên

foo() {
    while [[ "$#" -gt 0 ]]
    do
        case $1 in
            -f|--follow)
            local FOLLOW="following"
            ;;
            -t|--tail)
            local TAIL="tail=$2"
            ;;
        esac
        shift
    done
    echo "FOLLOW: $FOLLOW"
    echo "TAIL: $TAIL"
}

Output:

[[email protected] ~]# ./file1.sh 
[[email protected] ~]# foo -a
FOLLOW: 
TAIL: 
[[email protected] ~]# foo -t
FOLLOW: 
TAIL: tail=
[[email protected] ~]# foo -t 10
FOLLOW: 
TAIL: tail=10
[[email protected] ~]# foo -f
FOLLOW: following
TAIL: 
[[email protected] ~]# foo -f -t 10
FOLLOW: following
TAIL: tail=10

5. Trả về giá trị từ một function

Câu lệnh return trong bash là thoát khỏi hàm với một giá trị return trả về. Có thể coi đó là một trạng thái thoát của function

Nếu bạn muốn trả về một giá trị từ function thì hãy gửi giá trị đến stdout như sau:

fun() {
 local var="Heellooooo BASH"
 echo "$var"
}

output:

[[email protected] ~]# ./file1.sh 
[[email protected] ~]# fun
Heellooooo BASH

6. exit code cả một hàm là exit code của lệnh cuối cùng

is_alive() { ping -c1 “$1” }

Function này sẽ gửi một lệnh ping đến một máy chủ được chỉ định bởi tham số đầu tiên. STDOUT và STDERR của lệnh ping đều được gửi đên .dev.null, vì vậy hàn sẽ không bao giờ xuất ra bất kỳ thứ gì. Nhưng lệnh ping sẽ có exit code bằng 0 khi thành công và khác 0 khi thất bại vì đây là lệnh thoát cuối cùng của function, exit code của ping sẽ được sử dụng lại cho exit code của function chính.

Cám ơn các bạn đã theo dõi chuỗi bài viết. Đọc tiếp Day 8.

1 thought on “Bash Shell – Day 7 – Funtion”

Leave a Comment