函数:function, 功能
过程式编程,代码重用
模块化编程
简洁

语法:
    function f_name {
        函数体
    }
    或者
    f_name() {
        函数体
    }

调用:使用函数名
    函数名出现的地方,会被自动替换为函数代码;

练习:利用函数改写此前的服务脚本
    启动一个脚本之后,脚本本身会在/var/lock/subsys/目录下创建一个对应的锁文件
    service httpd start启动httpd服务,此时在/var/lock/subsys/目录下,会生成httpd锁文件
    /etc/rc.d/init.d存放服务脚本,遵循的是lsb编写格式
    在/etc/rc.d/init.d中有一个文件functions,为公用的函数
    想要调用functions文件里的各个函数,则添加
    . /etc/rc.d/init.d/functions代码,在你需要调用的文件中
    假如是httpd服务,则需要另外导入 . /etc/sysconfig/httpd 的配置文件

http服务器实例

    #!/bin/bash
    #
    #$0是当前脚本的名称
    prog=`basename $0`
    lockfile=/var/lock/subsys/$prog

    start() {
        if [ -e $lockfile ];then
            echo "$prog is already running."
        else
            touch $lockfile
            [ $? -eq 0 ] && echo "Starting $prog finished."
        fi
    }

    stop() {
        if [ -e $lockfile ];then
            rm -rf $lockfile
            [ $? -eq 0 ] && echo "Stoping $prog finished."
        else
            echo "$prog is stopped yet."
        fi
    }

    case $1 in
    "start")
        start ;;
    "stop")
        stop ;;
    "restart")
        stop
        start ;;
    *)
        echo "Usage: $prog {start|stop|restart}"
        exit 1
    esac

函数返回值:

    函数的执行结果返回值:
        函数中使用打印语句:echo, printf
        函数体中OS命令执行结果的输出

    函数的退出状态码:
        默认取决于函数体执行的最后一个命令的退出状态码;
        自定义退出状态码:
            return [0-255]
            注意:函数体运行时,一旦遇到return语句,函数即返回;

    函数可接受参数:
        传递参数给函数,调用函数时,在函数名后给出参数列表即可;
            例: testfunc arg1 arg2 arg3
        在函数体中可使用$1,$2....来调用传递过来的各参数
        可使用类似脚本的特殊变量
            $*,$@: 一次性获取参数列表
            $#: 参数的个数
            $?: 上一条命令的执行状态或返回状态码
文档更新时间: 2021-12-22 06:48   作者:月影鹏鹏