shell程式設計之函式

2021-10-25 07:51:40 字數 4380 閱讀 3380

shell函式的本質是一段可以重複使用的腳步**,這段**被提前編寫好了,放在了指定的位置,使用時直接呼叫即可

1、定義函式

可以帶function fun()定義,也可以直接fun()定義,不帶任何常數

#方法一

function name

#方法二

name()

function 是shell中的關鍵字,專門用來定義函式;

name 是函式名;

commands 是函式要執行的**,也就是一組語句;

return value 表示函式的返回值,其中return是shell的關鍵字,專門用在函式中返回乙個值;這一部分可以寫也可以不寫

由{}包圍的部分稱為函式體,呼叫乙個函式,實際上就是執行函式體中的**

函式的優勢

方便n次使用,減少**量,使之方便,整潔

當需要修改裡面的重複**時,只需要修改一次函式即可實現需求

將函式寫進檔案,需要時直接通過檔案呼叫

2、呼叫函式

2.1、執行不帶引數的函式

直接輸入函式名即可,不需要帶括號

functionname

執行函式時,函式名前的關鍵字function和函式名後面的()均不需要帶

函式的定義必須要在執行的程式前定義或載入

2.2、執行帶引數的函式

functionname arg1 arg2

shell中的位置引數(1/2./$@)均可以做為函式的引數進行傳遞

$0比較特殊,仍然是父指令碼的名稱

此時父指令碼的引數會臨時被函式的引數所掩蓋或隱藏

函式的引數變數是在函式體內裡面進行定義

2.3、函式的執行總結

shell各種程式的執行順序為:系統別名》函式->系統命令》可執行檔案等

函式執行時,會和呼叫它的指令碼共享變數,也可以為函式設定區域性變數及特殊位置引數

在shell函式裡面,return和exit功能類似,區別是return是退出函式,exit則是退出指令碼

return語句會返回乙個值給呼叫函式的程式,exit則會返回乙個值給執行當前指令碼的shell

如果將函式單獨存放為乙個檔案,在載入時需要使用source或.進行載入

在函式內部一般使用local定義區域性變數,僅在函式體內有效

2.4、呼叫函式

vi testfunction. sh

#!/bin/bash

#first function

function helloworld(

)#second function

welcome(

)#third function

function helloshell

#file functions

helloworld #呼叫函式

welcome

helloshell

#執行指令碼

2.5、從檔案中呼叫函式

vi filefunction.sh

function sum(

) sum is :'

$sum

}vi filefunctionfromfile.sh

path=

"f1lefunction.sh"

if[ -f $

]#判斷$是否為檔案

then

source

$path

#載入函式

sum #呼叫函式

else

echo

"file not exist or error"

fi#執行指令碼

vi filefunctionfromfile.sh

3、函式引數傳遞

function add ()}

add $1

$2#呼叫函式並傳遞引數

#執行指令碼

4、return 返回函式結果

vi 3.sh

function testreturn()

testreturn $1

result=

$?#獲取函式返回值if[

$=="122"

]then

echo

"$1 exist,return value is:"

$else

echo

"$1 not exist,return value is:"$fi

#執行指令碼

在該示例中,主要通過$?獲取返回值,但返回值的範圍只能是0-255

5、echo返回函式結果

vi 4.sh

function testreturn()

result=$(testreturn $1) #獲取函式返回值if[

$=="122"

]then

echo

"$1 exist,return value is:"

$else

echo

"$1 not exist,return value is:"$fi

#執行指令碼

在該示例中,主要使用$()獲取返回值,在該方法中,沒有範圍限制,是一種比較安全的返回方式

6、全域性變數和區域性變數

全域性變數在shell指令碼中任何地方都能使用;區域性變數在函式內部使用,宣告前加乙個local就好

vi 5.sh

function fun (

)a=4

b=6funif[

$a -gt $b

]then

echo

"$a is larger than $b"

else

echo

"$a is smaller than $b"

fifunction fun (

)a=4

b=6funif[

$a -gt $b

]then

echo

"$a is larger than $b"

else

echo

"$a is smaller than $b"

fi#執行指令碼

7、陣列變數和函式

$@變數會單獨處理每個函式

vi 6.sh

function addarray ()do

sum=$[

$sum + $value

]done

echo

$sum

}myarray=

(1 2 3 4 5)

#這裡arg1=$

)result=

$(addarray $arg1)

echo

"the result is $result"

#執行指令碼

8、遞迴函式

vi 7.sh

function factorial (

)read -p "enter value:" value

result=

$(factorial $value)

echo

"the factorial of $value is:$result"

#執行指令碼

shell 程式設計之函式

shell 函式的定義和普通的c語言函式定義差不多 function shell 函式的返回值,可以顯示的return 語句,如果沒有return 那麼就會把最後一條語句的執行結果作為返回值 shell 函式的返回值只能是整數 例子 hello echo you select hello hello...

Shell程式設計之函式

將程式裡多次被呼叫的相同 組合起來 函式體 並為其取乙個名字 函式名 其他所有想重複呼叫這部分 的地方都只需呼叫這個名字即可。優勢 寫法一 function 函式名 寫法二 function 函式名 寫法三 函式名 1 不帶引數的函式 直接輸入函式名即可 不帶小括號 注意 2 帶引數的函式 函式名 ...

Shell指令碼程式設計之Shell函式

1.linux shell可以使用者定義函式,然後在shell指令碼中可以隨便呼叫 shell中函式的定義格式如下 function funname 1 可以帶function fun 定義,也可以直接fun 定義,不帶任何引數 2 引數返回,可以顯示加 return返回,如果不加,將以最後一條命令...