shell 函数编程

Posted cook

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 函数编程相关的知识,希望对你有一定的参考价值。

函数语法

    语法:

    function F_NAME {
        函数体
    }

    F_NAME() {
        函数体
    }

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

    脚本:

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

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

简单示例

     #!/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

 信号捕捉:trap COMMAND;COMMAND

    循环控制:
        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"

 

以上是关于shell 函数编程的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程

shell脚本编程之函数

Shell编程基础:函数

shell编程之函数和case多条件分支语句

shell编程-10-函数

shell编程之函数