zoukankan      html  css  js  c++  java
  • 8.19 函数

    函数:
    1、函数介绍function
      为了避免代码重复使用,我们一般通过函数编写代码块,而这一个代码块用来实现某种功能。
      且,这个功能在后面的代码中会重复使用。
    2、函数的语法格式:
      function check_cpu{
      cat /proc/cpuinfo
      }
      ls /etc/
      check_cpu{不调用函数,则函数体中的命令是不会执行的;在哪里调用,函数体中的命令就在哪里执行}

      *fun_name(){
      函数体
      $1$2...$10
      }
      funname 1 2 3
      :wq
      function.sh 4 5 6 7 8 9 10 11 12 13

    3、函数的调用 - - return
      函数返回值
      1、当函数中指定了判断语句的时候,我们默认要返回一个错误的结果,但是如果最近一条命令确实是正确的,这时候,我们需要通过return返回一个我们需要的错误状态码;
      2、函数结束的时候,我们需要制定一个return的正确返回码;
      如果使用在循环语句中,return会跳出循环

    4、函数接受参数
      函数 变量
      和普通的命令一样
      只需要注意,在函数接受参数的时候,不会使用外部的传参,而是以脚本内部的参数为准

    5、函数中的变量
      本地变量
        local 变量名=xxx
        本地变量只在本函数内部生效
      局部变量
        脚本内部的变量
      环境变量
        在整个linux系统的bash中生效
      TEST() {
      local i=9
      let i++
      echo i
      exit 0
      }
      i=1
      TEST
      echo i

      扩展:关于脚本执行的问题:
      bash的方式来执行 - - #!/bin/bash
      bash所执行的脚本中定义的变量,在当前shell的子shell中;
      全路径或相对路径的方式来执行; - - 需要授权执行权限
      source脚本文件或者. 脚本文件
      source这种方式来执行脚本的时候,内部变量所定义的值是在当前shell中的;

    6、函数递归
      你站在镜子前,后面又有一面镜子

      n的阶乘
      n!=n(n-1)!
      (n-1)=(n-1)(n-2)!

      2!=2*1!
      兔子数列,斐波那契数列

      练习:
    1、脚本可以接受的参数:start stop restart status
      case 参数 in
      start
      stop
      restart
      status
      [case PAT支持的格式: * 任意内容 start|stop) a*(case语句中的PAT是支持文件通配的)]

    2、如果参数非此四者之一,提示使用的时候报错退出;
      *)
      echo "Usage:please input {start|stop|restart|status}"

    3、如果是start:

      则创建/var/lock/subsys/SCRIPT_NAME,并显示"启动成功"{考虑:如果事先已经启动过一次,该如何处理?}
      start)
      if [ -e /var/lock/subsys/testd_name ];then
      echo "服务已启动"
      else
      touch /var/lock/subsys/testd_name
      echo"服务启动成功"
      fi

    4、如果是stop:则删除/var/lock/subsys/SCRIPT_NAME,并显示"停止完成";[考虑:如果事先已经停止过了,该如何处理?]
      stop)
      if[ -e /var/lock/subsys/testd_name ];then
      rm -f /var/lock/subsys/testd_name
      echo "服务关闭成功"
      else
      echo "服务已关闭"
      fi
    5、如果是restart:
      restart)
      【将前面的代码写成函数】
      start
      stop

    6、如果是status,则
      如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAME is running…”
      如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped …”

      i=file.txt

      Start() {
      if [ -e /root/$i ];then
      echo "服务已经启动"
      else
      touch /root/$i
      echo "服务已启动"
      fi
      }

      Stop() {
      if [ -e /root/$i ];then
      rm -f /root/$i
      echo "服务已关闭"
      fi
      }

      Status() {
      if [ -e /root/$i ];then
      echo "服务已开启"
      else
      echo "服务已关闭"
      fi
      }

      Usage() {
      echo "Usage:{/root/testd.sh start|stop|status|restart}"
      }

      if [ $# -lt 1 ];then
      Usage
      exit 1
      fi

        
      case $1 in
      start)
      Start
      ;;
      stop)
      Stop
      ;;
      restart)
      Stop
      Start
      ;;
      status)
      Status
      ;;
      *)
      Usage
      ;;
      esac

  • 相关阅读:
    java基础35 双例集合Map及其常用方法
    java基础34 泛型的使用
    java基础33 Set集合下的HashSet集合和TreeSet集合
    java基础32 List集合下的ArrayList集合
    部分日期时间函数
    SQL语句常见视图操作部分试题(一)
    高级子查询常见用法及举例
    DDL/DML/DCL区别概述
    SQL语句常见DDL/DML/DCL操作部分试题(一)
    Create database 创建数据库
  • 原文地址:https://www.cnblogs.com/liuyuanzzz/p/11379333.html
Copyright © 2011-2022 走看看