function
函數
1.什麼是函數
函數也是具有和別名類似的功能:
簡單地說,函數的作用就是把程序裏多次調用相同的代碼部分定義成一份,然後爲這一份代碼起個名字,其他所有的重複調用這部分代碼就都只調用這個名字就可以了,當需要修改這部分重複代碼時,只需要改變函數體內的一份代碼即可實現所有調用修改。
使用函數的優勢:
1、把相同的程序段定義成函數,可以減少整個程序的代碼量。
2、增加程序的可讀、易讀性。
3、可以實現程序功能模塊化,不同的程序使用函數模塊化。
強調:對於shell來說,linux系統的2000個命令都可以說是shell函數。
2. shell函數語法
語法格式:
簡單語法格式:
函數名(){
指令…
return n
}
規範語法格式:
function 函數名(){
指令 …
return n
}
3. shell函數的執行
調用函數:
1)直接執行函數名即可(不帶括號)
函數名
注意:
a)執行函數時,函數後的小括號不要帶
b)函數定義及函數體必須在要執行的函數名的前面定義
2)帶參數的函數執行方法
函數名 參數 1 參數 2
【函數後接的參數說明】
* shell的位置參數($1、$2、$3、$4、$5、$#、$*、$?以及$@)都可以。
* 此時父腳本的參數臨時被函數參數所掩蓋或隱藏
* $0比較特殊,它仍然是父腳本的名稱。
* 當函數完成時,原來的命令行腳本的參數即恢復。
* 在shell函數裏面,return命令功能與shell裏的exit類似,作用是跳出函數
* 在shell函數體裏使用exit會退出整個shell腳本,而不是shell函數。
* return語句會返回一個退出值(返回值)給調度函數的程序
* 函數參數變量是在函數體裏面定義。
4、函數範例:
範例1:
腳本如下:
$ cat hs01.sh #簡單函數語法 jonny() { echo "I am jonny!" }
#規範函數語法
function jaye(){ echo "I am jaye!" } jonny #調用函數jonny jaye #調用函數jaye $ sh hs01.sh I am jonny! I am jaye!
範例2 調用函數:
1、被調用的函數腳本
$ vim hs01.sh jonny() { echo "I am jonny!" } function jaye(){ echo "I am jaye!" }
2、調用的函數腳本
$ cat hs02.sh HS="/server/script/hanshu/hs01.sh" . $HS jonny jaye
3、執行腳本
$ sh hs02.sh I am jonny! I am jaye!
範例3 函數傳參:
$ cat fun01.sh who(){ echo "I am $1." #定義函數的傳參 } who jonny #who 是函數 jonny是參數 $ sh fun01.sh I am jonny. #意思是將jonny 傳給$1,那麼打印出來的就是I am jonny.
範例4:函數傳參及腳本傳參
$ cat hs04.sh who(){ echo "I am $1." #定義函數的傳參 } who $1 #定義腳本的傳參 $ sh hs04.sh jonny #運行腳本接一個jonny參數 I am jonny. #打印出jonny,因爲Jonny是腳本的傳參,那麼who jonny就是函數的傳參.
範例5:函數傳參轉成腳本命令行傳參,對任意指定URL判斷是否異常。
案例一:
$ cat hs05.sh #!/bin/sh function check_url(){ curl $1 &>/dev/null if [ $? -eq 0 ];then echo "$1 is ok" else echo "$1 is no" fi } check_url $1
案例二:
$ cat hs05.sh #!/bin/sh function check_url(){ #curl $1 &>/dev/null wget -T 10 --spider -t 2 $1 &>/dev/null if [ $? -eq 0 ];then echo "$1 is ok" else echo "$1 is no" fi } check_url $1 $ sh hs05.sh www.baidu.com www.baidu.com is ok $ sh hs05.sh www.baidaaaau.com www.baidaaaau.com is no
分步解答:
1、腳本腳本傳參檢查web url是否正常。
2、檢查的功能寫成函數
3、函數傳參轉成腳本命令行傳參,對任意指定URL判斷是否異常。