记录工作和生活点点滴滴

Linux整理笔记第十六天-function

function:函数
过程式编程:代码重用
模块化编程
结构化编程

语法一:
function f_name {
    ...函数体...
}

语法二:
    f_name() {
        ..函数体...
    }

调用:函数只有被调用才会执行;
    调用:给定函数名
        函数名出现的地方,会被自动替换为函数代码;

    函数的生命周期:被调用时创建返回时终止;
        return命令返回自定义状态结果;
            0:成功
            1-255:失败

示例:添加用户
    #!/bin/bash
    #
    username='myuser'
    function adduser {
        if id $username &> /dev/null; then
            echo "$username exists."
            return 1
        else
            useradd $username
            [$? -eq 0 ] && echo "add $username finished." && return 0
        fi
    }

    adduser


示例:服务脚本
        1. #!/bin/bash
    #
    prog=$(basename $0)
    lockfile=/var/lock/subsys/$prog

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

    stop() {
        if [ -f $lockfile ]; then
            rm -f $lockfile && echo "stop $prog finished"
        else
            echo "$prog is stopped"
        fi
    }

    status() {
        if [ -e $lockfile ]; then
            echo "$prog is running."
        else
            echo "$prog is stopped"
        fi
    }
    usage(){
        echo "usage:$prog {start|stop|restart|status}"
    }
    if [ $# -lt 1 ]; then
        usage
        exit1
    fi

    case $i in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *)
        usage
    esac

    练习:打印99乘法表,利用函数实现;

函数返回值:
    函数的执行结果返回值;
        a. 使用echo或print命令进行输出;
        b. 函数体中调用命令的执行结果;
    函数的退出状态码;
        a. 默认取决于函数体中执行的最后一条命令的退出状态码;
        b. 自定义退出状态码;
            return

函数可以接受参数:
    传递参数给函数:调用函数时,在函数名后面以空白分割给定参数列表即可;例如“testfunc arg1 arg2 ...”

    在函数体当中,可使用$1,$2,。。。调用这些参数;还可以使用$@,$*,$#等特殊变量;

    示例:添加10个用户
    #!/bin/bash
    #
    function adduser {
        if [ $# -lt 1 ]; then
            return 2
            # 2:no arg
        fi

        if id $1 &> /dev/null; then
            echo "$1 exists."
            return 1
        else
            useradd $1
            [$? -eq 0 ] && echo "add $username finished." && return 0
        fi
    }
    for i in {1..10}; do
        adduser myuser$i
    done

    示例:打印NN乘法表,使用函数实现;

变量作用域:
    本地变量:当前shell进程;为了执行脚本会启动专用的shell进程;因此,本地变量的作用范围是当前的shell脚本程序文件;
    局部变量:函数的生命周期;函数结束时变量被自动销毁;
        如果函数中有局部变量,其名称同本地变量;

    在函数中定义局部变量的方法:
        local NAME=VALUE

函数递归:
    函数直接或间接调用自身;

    N!=N(n-1)(n-2)...1
未经允许不得转载:许春刚技术博客 » Linux整理笔记第十六天-function

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址