zoukankan      html  css  js  c++  java
  • shell进阶函数

    函数的定义和用途

       函数function是由若干条shell命令组成的语句块,实现shell代码的重用和模块化编程。

       函数和shell程序的异同点

         它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分 

         区别:

            1.shell程序会启动一个子shell来执行

            2.函数会在当前shell中运行,因此在当前shell中,函数可以对shell中的变量进行修改 (  函数的有效范围是在当前shell   )

         函数的优先级高于内部命令,外部命令,别名. 函数名称如果和以上三种名称冲突,优先函数执行.

         删除函数     执行unset functionname 

         调用函数  functioname    调用时候不要添加()

         全局函数    export  -f  functioname

         匿名函数    cmd1 || {  cmd2;  cmd3; }       后面的 { }    相当于匿名函数

        多个脚本中复用函数

             source     functions(functions表示包含很多个函数的脚本文件)  或者 . functions

             source    /etc/rc.d/init.d/functions

    函数变量类型

         1.全局(环境)变量  export

                当前shell和子shell有效 

         2.局部变量(普通变量)

               只在当前shell进程有效,为执行脚本会启动专用子shell进程; 因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数 

         3.本地变量   local

               函数的生命周期;函数结束时变量被自动销毁 

               declare num 在函数中使用的话   相当于declare local  num    会自带local的特性         declare -g  num  声明为局部变量

          如果函数中有局部变量,如果其名称同本地变量相同,使用局部变量 

    函数参数

        传递参数给函数:调用函数时,在函数名后面以空白分隔给定参数列表即可;如“testfunc arg1 arg2 ...”

        在函数体中当中,可使用$1, $2, ...调用这些参数;还可以使用$@, $*, $# 等特殊变量

    函数返回值

         return  退出函数本身   或者    return 100; 函数的返回值必须是一个数字       return 只能在函数中使用

         $?  获取函数的返回值

        函数有两种返回值:

        函数的执行结果返回值: 

          (1) 使用echo等命令进行输出 

          (2) 函数体中调用命令的输出结果 

       函数的退出状态码: 

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

             (2) 自定义退出状态码,其格式为: 

                  return  从函数中返回,用最后状态命令决定返回值 

                  return 0  无错误返回

                  return 1-255  有错误返回 

     1 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun1(){ return 100;}
     2 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun1
     3 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $?
     4 100
     5 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun2(){ return "aaa"; }
     6 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun2
     7 -bash: return: aaa: numeric argument required
     8 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $?
     9 255
    10 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun3() { echo 100; }
    11 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun3
    12 100
    13 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $?
    14 0
    View Code
  • 相关阅读:
    POJ 2001:Shortest Prefixes
    HDU 3746:Cyclic Nacklace
    继续Node爬虫 — 百行代码自制自动AC机器人日解千题攻占HDOJ
    C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~
    YTU 2335: 0-1背包问题
    YTU 3013: 皇后问题(递归)
    POJ 2406:Power Strings
    thinkphp中url路由
    php学习路线
    yii学习
  • 原文地址:https://www.cnblogs.com/yxh168/p/9016441.html
Copyright © 2011-2022 走看看