shell自定義函式

kunkliu發表於2020-04-05

轉載地址:https://www.cnblogs.com/oxspirt/p/7246075.html

“sum=$(fsum 2 5)”這種方式,是將標準輸出(echo 出來的東子)傳遞給主程式的變數而不是返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
function sum(){
 
 val1=$1
 
 val2=$2
 
 val3=$(($1+$2))
 
 echo $val3
 
}
 
#Call function with 2 parameters and it return 1 parameter.
ret_val=$(sum 10 20)
echo $ret_val

  指令碼執行結果: ret_val = $(sum 10 20)  將sum 10 20 的輸出傳遞給變數ret_val

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
prod=1
twoPow(){
        for((i=0;i<$1;i++));
        do
                prod=$(($prod*2))
        done
}
echo "Enter a number"
read num
twoPow $num
echo $prod

  執行指令碼 c.sh

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
 
twoPow()
{
    prod=1
    for((i=0;i<$1;i++));
    do
        prod=$(($prod*2))
    done
    return $prod
}
 
echo "Enter a number"
read num
twoPow num

  

 

----------------------------------------------------------------------------------------------------------------------------------

Shell的函式在使用之前必須先定義,定義格式:

1
2
3
4
5
[ function ] funname [()]
{
    action;
    [return int;]
}
  • 可以帶function fun()定義,也可以直接fun() 定義,不帶任何引數。
  • 引數返回,可以顯示加:return 返回,如果不加,將以最後一條命令執行結果,作為返回值。 return後跟數值n(0-255)

示例

1
2
3
4
5
6
7
8
9
10
fsum 2 5
 
fsum(){
    echo $1,$2
    return $1+$2
}
 
sum=$(fsum 2 5)
echo $?
echo "sum=$sum"

執行輸出:

fsum: not found
7
sum=2,5

從上面這個例子我們可以得到幾點結論:

  • 必須在呼叫函式地方之前,宣告函式,shell指令碼是逐行執行,這點和編譯型語言不通。
  • 函式返回值,只能通過$? 系統變數獲得,而“sum=$(fsum 2 5)”這種方式,是將標準輸出傳遞給主程式的變數,而不是返回值!

Shell函式可以在指令碼檔案中使用之前定義它,也可以把函式定義在一個獨立的檔案使用點號(.)命令來引用它。如function.sh和testshell.sh在同一目錄中,function.sh

1
2
3
4
fsum(){
    echo $1,$2
    return $(($1+$2))
}

testshell.sh

1
2
3
#! /bin/sh
. ./function.sh
fsum 2 5

 

相關文章