shell 函數

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判斷是否異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章