shell腳本之function

 包括函數定義、舉例應用:

 

定義函數:

function FUNC_NAME {

BODY

}

FUNC_NAME() {

BODY

}

例子1:

showecho() {

echo “hi”

}

for I in {1..10}; do

echo $I

showecho

done

例子2:

showmenu() {

cat << EOF

u|U show UID

g|G show GID

s|S show shell

q|Q quit;

EOF

}

 

showmenu

read –p “your choice” CHOICE

case $CHOICE in

u|U)

id –u root;;

g|G)

id –g root;;

s|S)

echo “/bin/bash”;;

*)

showmenu

read –p “Reselect:” CHOIEC

esac

 

函數返回值:默認最後語句的執行結果

 

自定義返回值:return #

test.h:

JUSER() {

id –u root&> /dev/null;then

return 0

else

return 1

fi

}

JUSER &> /dev/null

echo $?

 

接受參數:

例子1:

SUM() {

local SUMARY=0

SUMARY=$[$1+$2]

echo $SUMARY

}

SUM 5 6

//輸出11

例子2:接受start和stop作爲參數啓動或者停止服務

start() {

/usr/sbin/vsftpd &

[ $? –eq 0 ] && return 0 || return 1

}

stop() {

killall vsftpd

[ $? –eq 0 ] && return 0 || return 1

}

case $1 in

start)

start

[ $? –eq 0 ] && echo “starting vsftpd”

;;

stop)

stop ;;

*)

echo “Usage:’basename $0’ {start|stop}”               //basename 基名,最後一段的名字

 

改進:進程已存在就提示:

/var/lock/subsys/vsftpd文件

例子:(有缺陷,但基本可以體現含義)

LOCKFILE=/var/lock/subsys/vsftpd

start() {

[ ! –e $LOCKFILE ] && /usr/sbin/vsftpd &

[ $? –eq 0 ] &&touch $LOCKFILE && return 0 || return 1

}

stop() {

[ ! –e $LOCKFILE ] && killall vsftpd

[ $? –eq 0 ] && return 0 || return 1

}

case $1 in

start)

start

[ $? –eq 0 ] && echo “starting vsftpd”

;;

stop)

stop

if [ $? –eq 0 ]; then

echo –e “stop  ok”

else

echo –e “stop failed”

fi

;;

restart)

stop

sleep 1

start

;;

*)

echo “Usage:’basename $0’ {start|stop}”               //basename 基名,最後一段的名字

;;

esac

 

改進:將輸出放到函數中

 

 

 

系統自帶的很好的函數學習例子:

/etc/rc.d/init.d/functions

用less查看,關鍵的daemon()    killproc()   pidofproc()                 stasus()和一堆的echo_success等函數

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