包括函數定義、舉例應用:
定義函數:
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等函數