zoukankan      html  css  js  c++  java
  • shell脚本之函数

    函数:
    1、函数介绍:
    为了避免函数代码重复使用,我们一般通过函数编写代码块,而这一个代码块用来实现某种功能
    并且,这个功能在后面的代码中,会重复调用。
    2、函数的格式:
    function fun_name{
    函数体
    }
    check_CPU 【不调用函数,则函数体中的命令不会执行;在哪里调用,函数体中的命令就在那里执行】
    fun_name(){
    函数体
    $1$2$3$4$5
    }
    fun_name 1 2 33
    3、函数的调用
    函数的返回值
    1、当函数中指定了判断语句的时候,我们默认要返回一个错误的结果,但是最近一条命令确实正确的,这时候,我们需要通过return返回一个我们需要的状态码
    2、函数结束的时候,我们需要指定一个return的1正确返回码
    如果使用在循环语句中,return会跳出循环;
    4、函数接受参数
    函数 变量
    和普通命令一样
    只需要注意,函数接受参数的时候,不会使用外部的参数,而是以脚本内部的参数为准。
    5、函数中的变量
    本地变量
    local变量名=XXX
    本地变量只在本地函数内部生效
    局部变量
    脚本内部的变量
    环境变量
    在整个Linux系统的bash中生效

    i=1

    TEST(){
    local i=9
    let i++
    echo i
    exit 0
    }

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


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

    兔子数列,斐波那契数列

    1 #!/bin/bash
    2 # Author: wangshilin
    3 # Blog: https://home.cnblogs.com/wangshilin/
    4 # Time: 2019-08-19 23:44:43
    5
    6 f[0]=1
    7 f[1]=1
    8 for((i=2;i<10;i=i+1))
    9 do
    10 f[i]=$((f[i-1]+f[i-2]))
    11 done
    12
    13 for((j=0;j<10;j=j+1))
    14 do
    15 echo -e ${f[j]}" c"
    16 if test $(((j+1)%2)) = 0
    17 then
    18 echo -e ""
    19 fi
    20 done

    练习
    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,则先stop,再start;【考虑:如果本来没有start,如何出列?】
    restart)
    【将前面的代码写成函数】
    start
    stop
    6、如果是status,则
    如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAME is running…”
    如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped …”

    1 #!/bin/bash
    2 # Author: wangshilin
    3 # Blog: https://home.cnblogs.com/wangshilin/
    4 # Time: 2019-08-19 18:51:07
    5 i=file.txt
    6 Start(){
    7 if [ -e /root/$i ]; then
    8 echo" running"
    9 else
    10 touch /root/$i
    11 echo "Running"
    12 fi
    13 }
    14 Stop (){
    15 if [ -e /root/$i ]; then
    16 rm -f /root/$i
    17 echo "stop"
    18 fi
    19 }
    20 Status(){
    21 if [ -e /root/$i ]; then
    22 echo "running"
    23 else
    24 echo "stop"
    25 fi
    26 }
    27 Ugage(){
    28 echo "Ugage /root/li2.sh {start|stop|restart|status}"
    29
    30 }
    31 case $1 in
    32 start)
    33 Start
    34 ;;
    35 stop)
    36 Stop
    37 ;;
    38 restart)
    39 Stop
    40 Start
    41 ;;
    42 status)
    43 Status
    44 ;;
    45 *)
    46 Ugage
    47 ;;
    48 esac

  • 相关阅读:
    jQuery常用 遍历函数
    JS针对pc页面固定宽度在手机展示问题 <meta ...>
    关于窗口的一些小脚本
    关于 注册页面浏览器自动添加账号密码问题?
    一个完整的html 每个标签的含义
    rem与@media 的优缺点
    关于IE浏览器的一些思路
    jq 动态添加.active 实现导航效果
    CSS 常用样式 提高网页编写速度
    html5与js关于input[type='text']文本框value改变触发事件一些属性的区别oninput,onpropertychange,onchange和文本框的value点击全选状态onclick="select();"。做购物车页面时会要用到。
  • 原文地址:https://www.cnblogs.com/wangshilin/p/11378387.html
Copyright © 2011-2022 走看看