懒散的人

导航

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 

 

posted on 2019-09-14 17:29  懒散的人  阅读(192)  评论(0)    收藏  举报