shell 函数编程

函数语法

    语法:

    function F_NAME {
        函数体
    }

    F_NAME() {
        函数体
    }

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

    脚本:

    函数的返回值:
        函数的执行结果返回值:代码的输出
            函数中的打印语句:echo, print
            函数中调用的系统命令执行后返回的结果
        执行状态返回值:
            函数体中最后一次执行的命令状态结果
            自定函数执行状态的返回值:return #

    函数可以接受参数:
        在函数体中调用函数参数的方式同脚本中调用脚本参数的方式:位置参数
            $1, $2, ...
            $#, $*, $@

简单示例

     #!/bin/bash
        #
        # chkconfig: 2345 67 34
        #
        srvName=$(basename $0)

        lockFile=/var/lock/subsys/$srvName

        start() {
            if [ -f $lockFile ];then
            echo "$srvName is already running."
            return 1
            else
            touch $lockFile
            [ $? -eq 0 ] && echo "Starting $srvName OK."
            return 0
             fi
        }

        stop() {
            if [ -f $lockFile ];then
            rm -f $lockFile &> /dev/null
            [ $? -eq 0 ] && echo "Stop $srvName OK" && return 0 
            else
            echo "$srvName is not started."
            return 1
            fi
        }    

        status() {
            if [ -f $lockFile ]; then
            echo "$srvName is running."
            else
            echo "$srvName is stopped."
            fi
            return 0
        }

        usage() {
             echo "Usage: $srvName {start|stop|restart|status}"
             return 0
        }

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

break与continue

    循环控制:
        continue: 提前进入下一轮循环
            用于条件语句中,仅在某些个特殊场景提前进入;
        break [n]:跳出当前循环
            用于条件语句中,

        例如:查看用户登录

            #!/bin/bash
            #
            read -p "Plz enter a username: " userName

            while true; do
                if who | grep "\<$userName\>" &> /dev/null; then
                    break
                fi
                echo "not here."
                sleep 5
            done

            echo "$userName is logged on."


            #!/bin/bash
            #
            read -p "Plz enter a username: " userName

            until who | grep "\<$userName\>" &> /dev/null; do
              sleep 5
              echo "not here"
            done

            echo "here"

 

posted @ 2019-01-30 19:25  Coolc  阅读(613)  评论(0编辑  收藏  举报