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:

[root@hd ~]# ./helloname.sh bashshell
Hello, bashshell
[root@hd ~]# ./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 "$@"

Output:

[root@hd ~]# ./helloname.sh 1 2 a
1 2 a
[root@hd ~]# ./helloname.sh 1 2 4 5 
1 2 4 5
[root@hd ~]# ./helloname.sh bash shell 123 987
bash shell 123 987

Ví dụ 3:

In() {
 echo "First Name $1"
 echo "Last Name $2"
}
In "$@"
[root@hd ~]# ./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:

[root@hd ~]# ./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.

[root@hd ~]#  source helloname.sh 
Hello World!
[root@hd ~]# 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.

[root@hd ~]# bash -c 'greet' 
bash: greet: command not found

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

[root@hd ~]# bash -c 'greet' 
Hello World!

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

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

Output:

[root@hd ~]# ./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:

[root@hd ~]# ./file1.sh 
[root@hd ~]# foo -a
FOLLOW: 
TAIL: 
[root@hd ~]# foo -t
FOLLOW: 
TAIL: tail=
[root@hd ~]# foo -t 10
FOLLOW: 
TAIL: tail=10
[root@hd ~]# foo -f
FOLLOW: following
TAIL: 
[root@hd ~]# 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:

[root@hd ~]# ./file1.sh 
[root@hd ~]# 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