shell学习笔记(4)
1. 函数
先定义,后引用
function 名称( )
{
代码块
}
注意:function可以省略不写。
调用:函数名称
1 #!/bin/bash 2 add() 3 { 4 echo $[$1+$2] 5 } 6 7 add 1 2 8 add 3 4
也可以把函数单独写到一个文件中,然后供其他脚本调用。
# vim sum.sh
add() { echo $[$1+$2] echo $[$1*$2] }
# vim 1.sh
1 #!/bin/bash 2 . sum.sh 3 4 add 1 2 5 add 3 4
第二行表示把sum.sh这个函数读取进来,之后就可以调用里面的函数了。这种用法经常使用,例如/etc/init.d/httpd调用/etc/rc.d/init.d/functions
例1:写出httpd的控制脚本,实现start、stop、restart和status功能。
1 #!/bin/bash 2 prog=/usr/sbin/httpd 3 lockfile=/var/lock/subsys/httpd 4 pidfile=/var/run/httpd/httpd.pid 5 6 . /etc/init.d/functions 7 8 start() { 9 if [ -e $lockfile ];then 10 echo "the program `basename $prog` is started." 11 else 12 echo -e -n "the program `basename $prog` is starting..." 13 sleep 1 14 $prog && echo "[ok]" && touch $lockfile || echo "fail" 15 fi 16 } 17 18 stop() { 19 if [ -e $lockfile ];then 20 echo -e -n "the program `basename $prog` is stopping..." 21 sleep 1 22 killproc `basename $prog` && rm -rf $lockfile && echo "ok" || echo "fail" 23 else 24 echo -e "the program `basename $prog` is stopped." 25 fi 26 } 27 28 status() { 29 if [ -e $pidfile ];then 30 echo "the program `basename $prog` (`cat $pidfile`) is running..." 31 else 32 echo "the program `basename $prog` is stopped." 33 fi 34 } 35 36 case "$1" in 37 start) 38 start 39 ;; 40 stop) 41 stop 42 ;; 43 restart) 44 stop 45 start 46 ;; 47 status) 48 status 49 ;; 50 *) 51 echo "Usage: httpd {start|stop|restart|status}" 52 ;; 53 esac
Linux下比较好的杀死进程的方法是使用killproc函数,该函数定义在/etc/init.d/functions文件中。
# . /etc/init.d/functions(导入后才可以使用killproc函数)
# killproc httpd
浙公网安备 33010602011771号