zoukankan      html  css  js  c++  java
  • Shell-06 函数

    Shell-06 函数

    #编写脚本,使用chkconfig命令,循环执行,关闭所有5级别服务

    #!/bin/bash
    name=`chkconfig --list | cut -d' ' -f1`
    
    for i in [name];do
    
            chkconfig --level 5 $i off
    
    done
    
    name=`chkconfig --list | awk '{print $1}'`
    
    for i in $name;do
    
            if chkconfig --list $i | grep "5:off" &> /dev/null;then
    
                    echo "这个$i服务已经关闭"
    
            else
    
                    chkconfig --level 5 $i off
    
                    echo "这个$i服务已经关闭"
    
            fi
    
     
    
    done

    1.函数介绍

    为了避免代码的重复使用,我们一般通过函数编写代码块,而这个代码块用来实现某种功能。且这个功能在后面得代码中,会重复调用;

    Def

    2.函数的格式

    function

    格式1:

                  Function fun_name{

                         函数体

    }

           Fun_name()

    【不调用函数,则函数体中的命令是不会被执行的;在哪里调用,函数体中的命令就在那里执行】

    格式2:

           Fun_name(){

                  函数体

    $1 $2…$10

    }

    Fun_name 1 2 3

    :wq

    Fun_name 4 5 6 7 8 9 10 11 12 13 14

     

    1.Case PATTERN支持的格式:* 任意内容start|stop) a*)

           Case语句中的pattern支持文件通配符的

    2.*)

           Echo “Usage:please input{start|stop|restart|status}”    

    1. start)

    if [ -e /var/lock/subsys/testd_name ] ;then

            echo “脚服务已启动”

    else

            touch /var/lock/subsys/testd_name

            echo “服务启动成功”

    fi

    1. stop)

    if [ -e /var/lock/subsys/testd_name ] ;then

            rm -f  /var/lock/subsys/testd_name

            echo “服务挂关闭成功”

    else

            echo “服务已关闭”

    fi

    1. restart)

    【将前面的代码写成函数】

        Start

    Stop

    1. status

     

    fun_start(){

            if [ -e /var/lock/subsys/testd_name ];then

                    echo "服务已启动"

            else

                    touch /var/lock/subsys/testd_name

                    echo "服务启动成功"

            fi

    }

    fun_stop(){

            if [ -e /var/lock/subsys/testd_name ];then

                    rm -f /var/lock/subsys/testd_name

                    echo "服务关闭成功"

            else

                    echo "服务已关闭"

            fi

    }

    fun_restart(){

            fun_stop

            fun_start

    }

    fun_status(){

            if [ -e /var/lock/subsys/testd_name ];then

                    echo "testd_name is running"

            else

                    echo "testd_name is stopped"

            fi

    }

    fun_usage(){

             echo "Usage: please input{start|stop|restart|status}"

    }

    if [ $# -lt 1 ];then

            Usage

            exit 1

    fi

    case $1 in

            start)

                    fun_start

                    ;;

            stop)

                    fun_stop

                    ;;

            reatart)

                    fun_restart

                    ;;

            status)

                    fun_status

                    ;;

            *)

                    fun_usage

                    ;;

    esac

     

    1. 函数返回值得问题
    useradd_1(){
    
           for i in `seq 1 10` ;do
    
                  if id user$i &> /dev/null;then
    
                         echo “user$i 存在”
    
                  else
    
                         useradd user$i &> /dev/null
    
                         echo “user$i OK”
    
                         return 0
    
                  fi
    
           done
    
    }
    
    useradd_1

    a)       当函数中指定了判断语句时,默认要返回一个错误结果,但是最近一条命令确实正确的,需要通过return来返回我们需要的正确的状态码。

    b)      函数结束的时候,我们需要指定一个return的正确返回码;

    如果使用循环语句时,return会跳出循环

    Userdel -r 删除用户以及用户家目录

    1. 函数接收参数

    函数 变量

    和普通命令一样

    只需要注意,在接收参数的时候,不会使用外部的传参,而是以脚本内部的参数为准

    1. 函数的变量

    本地变量

                          Local 变量名=xxx

                          本地变量只在本函数的内部生效

    局部变量

                          脚本内部的变量

    环境变量

                          在整个Linux系统的bash中生效

    i=1

    TEST(){

            Local i=9

            Let i++

            Echo i

            Exit 0

    }

    TEST

    Echo i

    扩展:关于脚本执行的问题

    a)       bash的方式来执行

    bash所执行的脚本中定义的变量,在当前shell的子shell中

    b)      通过全路径或者相对路径的方式来执行-------#!/bin/bash 需要授权执行权限;

    c)       Source脚本文件或者.脚本文件

    Source这种方式来执行脚本的时候,内部变量所定义的值是在当前的shell中的

    1. 函数递归

    你 站在镜子的前面,后面又有一面镜子

    n的阶乘
    
            n!=n*(n-1)!
    
            (n-1)!=(n-1)*(n-2)!
    
            fun(){
    
                   if  [ $1 -le 1 ];then
    
                          echo 1
    
                   else
    
                          q=$[$1*$(fun$[$1-1])]
    
                          echo $q
    
                   fi
    
    }
    
    fun 5

     

     

    兔子数列,斐波那契数列

    1+1=2  1+2=3 2+3=5 3+5=8

    1 1 2 3 5 8 13 21 34….

    Fn = F(n-1)+F(n-2)

  • 相关阅读:
    How to load custom styles at runtime (不会翻译,只有抄了 )
    更多FMK 的还是看万一的吧
    Custom Grid Columns
    样式和说明文档
    LiveBindings --- 把对象之间的属性绑定起来
    LiveBindings如何绑定一个对象(转)
    Delphi LiveBinds组件
    记录一偏,因为我不会翻译,
    Delphi XE4 For IOS之部署问题
    Delphi XE5 android 捕获几个事件
  • 原文地址:https://www.cnblogs.com/KAJIA1/p/11392371.html
Copyright © 2011-2022 走看看