zoukankan      html  css  js  c++  java
  • shell编程之函数

    shell编程之函数

    函数的作用就是将程序里多次被调用的相同的代码组合起来(函数体),为其取个名字(函数名),其它所有想重复调用这部分代码的地方都只需要调用这个名字
    函数的优势:
    把相同的程序定义成函数,可以减少程序的代码量,提升开发效量
    增加程序的可读、易读性,提升管理效率
    可以实现程序功能模块化,使程序具备通用性(可移植性)
    

    1.shell函数语法

    方法一:
    function 函数名() {
        指令集...
        return n
    }
    方法二:
    function 函数名 {
        指令集...
        return n
    }
    方法三:
    函数名() { 
        指令集...
        return n
    }
    

    1.1 函数的执行

    1.不带参数的函数执行时,直接输入函数名即可(不带小括号):格式如下:函数名
    有关执行函数的重要说明:
    执行函数时,函数名前的function和函数后的小括号都不要带
    函数的定义必须要在执行前面定前或加载
    shell执行系统中各种程序的顺序为:系统别名-函数-系统命令-可执行文件
    函数执行时,会和调用它的脚本共用变量,可以为函数设定局变变量以及特殊位置参数
    在shell函数里,return命令功能与exit类似,作用是退出函数,而exit是退出脚本文件
    return语句会返回一个退出值(返回值)给调用函数的当前程序,而exit会返回一个退出值给执行程序的当前shell
    如果函数存放在独立的文件中,被脚本加载使用时,需要使用source或.来加载
    在函数内一般使用local定义局部变量,这些变量离开函数后即消失
    2.带参数函数的执行方法,格式如下:函数名 参数1 参数2
    函数后接参数说明:
    shell的位置参数$1、$2....$#、$*、$?、$@都可以作为函数的参数使用
    此时父脚本的参数临时的被函数参数所掩盖或隐藏
    $0比较特殊,它仍是父脚本的名称
    当函数执行完成时,原来的命令脚本参数即恢复
    函数的参数变量是在函数体里面定义的
    

    1.2 简单函数执行

    oldboy() {
       echo "I am oldboy"
    }
    oldboy
    function oldgirl() {
     echo "I am oldgirl"
    }  
    oldgirl
    function test {
      echo "this is test"
    }
    test
    

    1.3 带参数函数执行

    [root@ci-node1 scripts]# cat 12.sh.1 
    #!/bin/bash
    ##############################################################
    # File Name: 12.sh
    # Version: V1.0
    # Author: liu
    # Organization: 
    # Created Time : 2019-04-12 10:36:48
    # Description:
    ##############################################################
    oldboy() {
       echo "I am $1"
    }
    oldboy $1
    ps:从接收脚本参数,然后将收到参数传给函数
    

    2.函数案例

    2.1 通过脚本传参的方式,检查Web 网站URL是否正常

    使用命令访问url命令:

    wget命令:
    --spider:模拟爬虫
    -q:安静访问
    -o /dev/null:不输出
    -T --timeout 超时时间
    -t --tries 重试次数
    wget --spider -T 5 -q -o /dev/null -t 2 www.baidu.com
    curl命令:
    -I 看响应头
    -s 安静的
    -o /dev/null 不输出
    -w %{http_code} 返回状态码,200
    curl -I -m 5 -s -w "%{http_code}
    " -o /dev/null  www.baidu.com
    

    案例:

    [root@ci-node1 scripts]# cat 13.sh 
    #!/bin/bash
    ##############################################################
    # File Name: 13.sh
    # Version: V1.0
    # Author: liu
    # Organization: 
    # Created Time : 2019-04-12 18:07:02
    # Description:
    ##############################################################
    chekurl() {
       wget --spider -o /dev/null -T 5 $1
       if [ $? -ne 0 ]
       then
           echo "网站url不正常!"
       else
           echo "网站正常"
        fi
    }
    usage() {
        echo "Usage:$0 url"
    }
    main() {
       if [ $# -ne 1 ]
       then
           usage
       else
           chekurl $1
       fi
    
    }
    main $*
    
  • 相关阅读:
    校内模拟赛 虫洞(by NiroBC)
    校内模拟赛 旅行(by NiroBC)
    P3830 [SHOI2012]随机树
    4358: permu
    【noi.ac】#309. Mas的童年
    P1438 无聊的数列
    2091: [Poi2010]The Minima Game
    LOJ #6074. 「2017 山东一轮集训 Day6」子序列
    LOJ #6068. 「2017 山东一轮集训 Day4」棋盘
    LOJ #6073. 「2017 山东一轮集训 Day5」距离
  • 原文地址:https://www.cnblogs.com/yjiu1990/p/10748222.html
Copyright © 2011-2022 走看看