• Linux学习59 shell脚本高级用法-函数编程与应用实战


    一、回顾:循环

      1、循环控制:break,continue

      2、while,for循环的特殊用法

      3、for (());do

        循环体

        done

      4、while read VARAIBLE;do

        循环体

        done < /PATH/FROM/SOMEFILE

    二、bash脚本编程

      1、case语句

        a、多分支if语句:

          if CONDITION1;then

            分支1

          elif CONDITION2;then

            分支2

          ...

          else CONDITION;then

            分支n

          fi

        b、实例

          (1)实例1:显示一个菜单给用户

            cpu) display cpu infomation

            mem) display memory infomation

            disk) display disks infomation

            quit) quit

            要求:

              1)、提示用户给出自己的选择

              2)、正确的选择则给出相应的信息,否则,则提示重新选择正确的选项

       

      2、case语句的语法格式

        a、语法格式

          case $VARAIBLE in

          PAT1)

            分支1

            ;;

          PAT2)

            分支2

            ;;

          ...

          *)

            分支n

            ;;

          esac

        b、上述示例

        c、示例:写一个服务框架脚本

          $lockfile,值为/var/lock/subsys/SCRIPT_NAME

          (1)、脚本可接受start,stop,restart,status四个参数之一

          (2)、如果参数非此四者,则提示使用帮助后退出

          (3)、start,则创建lockfile,并显示启动;stop;则删除lockfile,并显示停止;restart,则先删除此文件再创建此文件,而后显示重启完成;status,如果lockfile存在则显示running,否则,则显示为stopped

            

            

            

      3、case总结

        a、case支持glob风格的通配符

          *:任意长度的任意字符

          ?:任意单个字符

          []:范围内任意单个字符

          a|b: a或b

    三、函数:function

      1、过程式编程:代码重用

        a、模块化编程

        b、结构化编程

        c、把一段独立功能的代码当做一个整体,并为之取一个名字;命名的代码段,此即为函数

          注意:定义函数的代码段不会自动执行,在调用时执行;所谓调用函数,即在代码中给定函数名即可,函数名出现的任何位置,在代码执行时,都会被自动替换为函数代码

      2、定义函数

        a、语法一

          function f_name {

            ...函数体...

          }

        b、语法二

          f_name() {

            ...函数体...

          }

        c、函数的生命周期:每次被调用时创建,返回时终止

          (1)、其状态返回结果为函数体中运行的最后一条命令的状态结果

          (2)、自定义状态返回值,需要使用:return

            return[0-25]

            0:成功

            1-255:失败

      3、示例

        a、给定一个用户名,取得用户的id号和默认shell

          (1)、方式1

            

           (2)、方式2

            

           (3)、我们现在来重复使用

            

        b、重写前面的服务脚本框架

          

          

      4、函数返回值

        a、函数的执行结果返回值

          (1)、使用echo或printf命令进行输出

          (2)、函数体中调用的命令的执行结果

        b、函数的退出状态码

          (1)、默认取决于函数体中执行的最后一条命令的退出状态码

          (2)、自定义:return

      5、函数可以接受参数

        a、传递参数给函数

          (1)、在函数体当中,可以使用$1,$2,...引用传递给函数的参数,还可以在函数中使用$*或$@引用所有参数,$#引用传递的参数的个数

          (2)、在调用函数时,在函数名后面以空白符分隔给定参数列表即可,例如,testfunc arg1 arg2 arg3...

        b、实例

          (1)、添加10个用户,添加用户的功能使用函数实现,用户名作为参数传递给函数

            

      6、练习题

        a、使用函数实现ping一个主机来测试主机的在线状态,主机地址通过参数传递给函数

          主程序:测试172.16.1.1-172.16.67.1范围内各主机的在线状态

        b、写一个脚本,实现打印NN乘法表;

    四、变量作用域

      1、局部变量:作用域是函数的生命周期;在函数结束时被自动销毁

        a、定义局部变量的方法:local VARIABLE=VALUE

      2、本地变量:作用域是运行脚本的shell进程的生命周期,因此,其作用范围为当前shell脚本程序文件

        a、实例1

          

          

         b、实例2

          

          

    五、函数递归

      1、函数直接或间接调用自身

        a、经典场景

          

           

           

        b、菲薄拉些数列实现

          

          

          

          

          

          

          

  • 相关阅读:
    本地计算机上的SQL Server(MSSQLSERVER)服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
    三色需求与工作层次
    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Gold;第一次无效
    c# 在DataTable的第一列(指定列)的前面添加一列
    去掉DataGridView最后一行的空白行,删除空白行
    阿里云OSS Multipart Upload上传实例
    sql 自动增加排序 并且初始值是000001
    HTML禁用Flash文件右键
    HTML,JS禁止鼠标右键、禁止全选、复制、粘贴的方法
    C#PDF转Word
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/12601110.html
Copyright © 2020-2023  润新知