shell(4) 函數.doc

來源:互聯網
上載者:User

1)



建立

function
name{

      
...

}

或:

name(){

      

}

 

2)



調用

直接使用函數名,函數定義後才可以調用;

函數同名時新定義將覆蓋老的定義,並且無警示;

 

3)



退出

使用
return

 

4)



傳回值

函數退出狀態,可使用變數
$?
獲得——
$?
總是最後一條命令的結果,因此函數返回後需儘快擷取傳回值,否則會被新的命令的返回覆蓋;

l        



預設傳回值為最後一條命令的傳回值;

l        



使用“
return n
”返回,
n
為整數,範圍
0

255

TBD
,只能使用
$?
獲得結果?

l        



使用
shell
變數儲存傳回值,可用於任意傳回值類型——使用
echo
輸出

eg:

function
a {

   
echo "xxxx"

   
read -t 3 -p "input sth" sth   
#

輸出到
STDOUT


input sth

不會作為返回的一部分

   
echo 1000

   
echo $sth

}

 

rlt=`a`    
      
#a

的傳回值儲存在
rlt

echo
$rlt 
      
#rlt


的值為所有
echo


輸出的組合



如果採取例子裡的方式,則函數被作為一個子進程,其中的
exit
不能用於退出指令碼;此外,仍然可以使用
$?
獲得函數
return
(或
exit
)的結果;

TBD

:怎樣讓其中的部分
echo
不作為函數輸出?

方法:可以把這個
echo
重新導向到
STDERR

 

5)



傳參

bash
將函數作為小型指令碼處理,也可傳遞參數,函數名為
$0
,參數為
$1

$2

傳參的調用方式

result=`a 1 abc`

 

6)



全域變數

指令碼中定義的變數預設都是全域變數,函數可訪問其外部定義的變數——不好的風格

eg:

function
a {

   
c=dddd         
#

函數中定義的變數

   
echo $c

}

c=1111

echo
$c

a                  
      
#c

值被更改

echo
$c

 

7)



局部變數,使用
local

eg:

function
a {

   
local c=dddd 
#

定義局部變數

   
echo $c

}

c=1111

echo
$c

a

echo
$c         
#c

值不被函數
a

更改

 

8)



遞迴

eg
,實現階乘
x!=x*(x-1)!

function
x {

   
if [ $1 -eq 1 ]; then

      
echo $1

   
else

      
local tmp=$[$1-1]

      
echo $[$1 * `x $tmp`]

   
fi

}

 

ret=`x
5`

echo $ret

 

9)



函數庫

建立:將函數寫到獨立檔案中即可,如
aaa.t

庫的問題:函數與環境變數一樣,僅在建立它的
shell
中有效;

使用:
source
命令,實現在當前
shell
中執行命令的功能;

source
的別名:
dot operator

不使用
source
命令則將建立新的
shell
執行命令,從而面臨上述問題;

eg
,引用
aaa
庫:

.
./aaa.t

 

source
命令相當於
#include
,用於引入檔案,之後檔案中的函數就可以直接調用了

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.