5-30shell編程實(shí)戰(zhàn)入門

function 函數(shù)名() { #<==作者推薦的書寫函數(shù)的方法(帶括號(hào))

? ? 指令集...

? ? return n

}

簡(jiǎn)化寫法1:

function 函數(shù)名 {

? #<==不推薦讀者使用此方法(無括號(hào),函數(shù)名和左大括號(hào)之間要有空格。)

? ? 指令集...

? ? return n

}

在Shell函數(shù)的語(yǔ)法中,當(dāng)有function時(shí),函數(shù)名后面的小括號(hào)“()”部分可以省略不寫。

簡(jiǎn)化寫法2:

函數(shù)名() {? #<==不用function的方法

? ? 指令集...

? ? return n

}

在Shell函數(shù)的語(yǔ)法中,function表示聲明一個(gè)函數(shù),這部分可以省略不寫。

oldboy(){

? ? echo "I am oldboy."

? ? echo "I am oldgirl."

}

for n in {1..5}

do

? oldboy

done

[root@web01 /etc/init.d]# cat rsyncd

#!/bin/bash

# chkconfig: 2345 21 81

# description: startup rsync scripts

if [ "$1" = "start"? ]

then

? if [ -f /var/run/rsyncd.pid -a -s /var/run/rsyncd.pid ]

? then

? ? ? :

? else

? ? ? rsync --daemon

? fi

elif [ "$1" = "stop"? ]

then

? ? if [ -f /var/run/rsyncd.pid -a -s /var/run/rsyncd.pid ]

? ? then

? ? ? ? kill `cat /var/run/rsyncd.pid`

? ? else

? ? ? ? echo "Failed to stop rsync Unit rsync not loaded."

? ? ? ? exit 1

? ? fi

elif [ "$1" = "restart"? ]

then

? ? if [ -f /var/run/rsyncd.pid -a -s /var/run/rsyncd.pid ]

? ? then

? ? ? ? kill `cat /var/run/rsyncd.pid`

? ? fi

? sleep 2

? if [ -f /var/run/rsyncd.pid -a -s /var/run/rsyncd.pid ]

? then

? ? ? :

? else

? ? ? rsync --daemon

? fi

else

? ? echo "Usage;$0 {start|stop|restart}"

fi

[root@web01 /etc/init.d]# cat rsyncd1

#!/bin/bash

# chkconfig: 2345 21 81

# description: startup rsync scripts

start(){

if [ -f /var/run/rsyncd.pid -a -s /var/run/rsyncd.pid ]

? then

? ? ? :

? else

? ? ? rsync --daemon

fi

}

stop(){

? ? if [ -f /var/run/rsyncd.pid -a -s /var/run/rsyncd.pid ]

? ? then

? ? ? ? kill `cat /var/run/rsyncd.pid`

? ? else

? ? ? ? echo "Failed to stop rsync Unit rsync not loaded."

? ? ? ? exit 1

? ? fi

}

if [ "$1" = "start" ]

then

? start

elif [ "$1" = "stop" ]

then

? stop

elif [ "$1" = "restart" ]

then

? $0 stop

? sleep 2

? $0 start

else

? ? echo "Usage;$0 {start|stop|restart}"

fi

[root@web01 /etc/init.d]# cat rsyncd2

#!/bin/bash

# chkconfig: 2345 21 81

# description: startup rsync scripts

start(){

if [ -f /var/run/rsyncd.pid -a -s /var/run/rsyncd.pid ]

? then

? ? ? :

? else

? ? ? rsync --daemon

fi

}

stop(){

? ? if [ -f /var/run/rsyncd.pid -a -s /var/run/rsyncd.pid ]

? ? then

? ? ? ? kill `cat /var/run/rsyncd.pid`

? ? else

? ? ? ? echo "Failed to stop rsync Unit rsync not loaded."

? ? ? ? exit 1

? ? fi

}

main(){

if [ "$1" = "start" ]

then

? start

elif [ "$1" = "stop" ]

then

? stop

elif [ "$1" = "restart" ]

then

? $0 stop

? sleep 2

? $0 start

else

? ? echo "Usage;$0 {start|stop|restart}"

fi

}

main $*

函數(shù)的參數(shù):? 腳本的參數(shù):

函數(shù)后接的參數(shù)說明:

? Shell的位置參數(shù)($1、$2…、$#、$*、$?以及$@)都可以作為函數(shù)的參數(shù)使用。

? 此時(shí)父腳本的參數(shù)臨時(shí)地被函數(shù)參數(shù)所掩蓋或隱藏。

? $0比較特殊,它仍然是父腳本的名稱。

? 當(dāng)函數(shù)執(zhí)行完成時(shí),原來的命令行腳本的參數(shù)即恢復(fù)。

? 函數(shù)的參數(shù)變量是在函數(shù)體里面定義的。

[root@web01 /server/scripts]# cat func3.sh

oldboy(){

? ? echo "I am $1"

}

oldboy xiangbo

[root@web01 /server/scripts]# cat func4.sh

oldboy(){

? ? echo "I am $1."

}

oldboy $1

練習(xí)1:檢測(cè)網(wǎng)站URL是否異常(可以用本地URL或者www.baidu.com)

練習(xí)2:用函數(shù)實(shí)現(xiàn)上述功能。

練習(xí)3:將函數(shù)的傳參轉(zhuǎn)成腳本文件命令行傳參,對(duì)命令行接任意指定URL判斷是否異常。

[root@web01 /server/scripts]# cat check_url1.sh

#!/bin/sh

wget -q 127.0.0.1 &>/dev/null

retval=$?

if [ $retval -eq 0 ]

then

? echo "url is ok."

else

? echo "url is no."

fi

改成傳參:

[root@web01 /server/scripts]# cat check_url2.sh

#!/bin/sh

wget -q $1 &>/dev/null

retval=$?

if [ $retval -eq 0 ]

then

? echo "url is ok."

else

? echo "url is no."

fi

專業(yè)寫法:

[root@web01 /server/scripts]# cat check_url3.sh

#!/bin/sh

check_url(){

wget -q $1 &>/dev/null

retval=$?

if [ $retval -eq 0 ]

then

? echo "url is ok."

else

? echo "url is no."

fi

}

main(){

? ? check_url $1

}

main $*

[root@web01 /server/scripts]# sh check_url3.sh 127.0.0.1

url is ok.

[root@web01 /server/scripts]# cat check_url3.sh

#!/bin/sh

usage(){

? ? if [[ ! $1 =~ http://www.*com ]]

? ? then

? ? ? ? echo "Usage:$0 http://www.xx.com"

? ? ? ? exit 1

? ? fi

}

check_url(){

wget -q $1 &>/dev/null

retval=$?

if [ $retval -eq 0 ]

then

? echo "url is ok."

else

? echo "url is no."

fi

}

main(){

? ? usage $1

? ? check_url $1

}

main $*

[root@web01 /server/scripts]# cat check_url4.sh

#!/bin/sh

[ -f /etc/init.d/functions ] && . /etc/init.d/functions

usage(){

? ? if [[ ! $1 =~ http://www.*com ]]

? ? then

? ? ? ? echo "Usage:$0 http://www.xx.com"

? ? ? ? exit 1

? ? fi

}

check_url(){

wget -q $1 &>/dev/null

retval=$?

if [ $retval -eq 0 ]

then

? action? "url is ok." /bin/true

else

? action "url is no." /bin/false

fi

}

main(){

? ? usage $1

? ? check_url $1

}

main $*

[root@web01 /server/scripts]# sh check_url4.sh http://www.baidu.com

url is ok.? ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容