shell自定義函數


參考: http://www.cnblogs.com/zhaiqianfeng/p/4621297.html

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

#!/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

#!/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

 

 

#!/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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM