zoukankan      html  css  js  c++  java
  • shell-函数基础

    函数定义

    通俗的讲函数就是一团集中的代码,形成一个代码块,这个代码块可以实现某个具体的功能。本质上来讲,函数是函数名到某个代码块的映射。也就是说,用户定义函数后,就可以通过函数名来调用其对应的代码块

    从形式上来看,shell函数和shell脚本并没有什么区别,都是一些命令的堆叠。

    但是shell脚本执行的时候操作系统会为其创建一个新的进程,解释代码。执行完成后,该进程自动关闭
    调用函数时,操作系统并不会为其单独创建进程,而是在调用者的shell进程中直接解释执行函数中的代码

    shell函数的定义语法

    funtion_name ()
    {
    statement1
    statement2
    .....
    statementn
    }
    

    或者是

    function function_name ()
    {
    statement
    statement2
    ......
    }
    
    

    举个简单的例子,定义函数分别用两种写法定义hello

    #!/bin/bash
    #this is a script to test the function
    
    function hello1 ()
    {
            echo "This is the first function! "
    }
    hello1
    echo
    hello2 ()
    {
            echo "This is the second function! "
    }
    hello2
        
    

    输出结果为

    函数调用

    事实上函数的调用和变量的调用类似,预先定义好函数体,然后通过函数名来调用定义好的函数体。调用的方法为:
    function_name param1 param2 param3....
    其中function_name是函数名(调用时不加括号),param为函数的参数
    写一个简单的查看cpu信息和系统负载的函数,将信息保存在当前目录下命名为 cpuinfo_and_system_load.txt,然后通过cat查看

    #!/bin/bash
    #View the CPU information and system load
    func ()
    {
            cpu_info=` cat /proc/cpuinfo `
            system_load=`w`
            echo "$cpu_info"
            echo
            echo "$system_load"
    
    
    }
    func >cpuinfo_systemload.txt
    cat cpuinfo_systemload.txt
    

    输出结果为

    函数链接

    所谓链接就是,在一个函数中调用另一个函数的过程,即俄罗斯套娃大法。因为定义一个函数之后在该shell中,此函数就是一个合法的shell命令,可以在后续的脚本中使用。
    定义康康和李梅,在李梅中调用康康的变量名,然后调用李梅输出结果。

    #!/bin/bash
    kangkang ()
    {
            echo "I LOVE YOU"
    }
    
    limei ()
    {
            echo "kangkang say `kangkang` me too"
    }
    limei
    

    输出结果:

    函数的返回值

    返回值,顾名思义就是函数根据用户输入的参数,执行脚本计算后,返回给用户的值。
    例如输入a和b两个值,计算乘积,将结果$c作为返回值返回给用户,使用echo $?查看返回值:

    #!/bin/bash
    func ()
    {
    read a b
    let "c = $a * $b"
    return $c
    }
    func
    echo $?
    

    输出结果

    可以看到但返回值小于255时都是正常的,但是在150乘2时返回的结果却为44,因为return只能返回0~255之间的整数值,不在这个范围之内就会返回错误的结果
    事实上要获得返回值,使用最多的是“echo”命令,echo没有0~255的限制,可以将各种数据写入标准输出,因此更加强大。

    #!/bin/bash
    func ()
    {
    echo "请输入两个值,中间以空格隔开,计算它们的乘积"
    read a b
    let "c = $a * $b"
    echo ”乘积为 $c“
    }
    func
    

    输出为

    函数和别名

    我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。如果不想用了,还可以用unalias解除别名功能。直接敲alias会看到目前系统预设的alias.

    一个简单的别名演示

    全局变量和局部变量

    默认情况下,除了与函数参数相关联的特殊变量之外,其他的所有变量都是全局变量。即使在函数内部,除了带有local关键字进行修饰的变量,一律为全局变量。

    #!/bin/bash
    var=123     
    func ()
    {
            echo $var      //此处的全局变量为var=123
            var=321
            echo $var      //此处的全局变量为321     
            local var=12423445      //此处为局部变量
            echo $var      //$var的值应该是12423445这个局部变量
    }
    echo $var      //因为尚未调用函数,所以$var的值为123
    func
    echo $var      //函数内最后一次对$var的全局变量的声明为321,局部变量12423445的范围仅限于函数内部
    
    

    据分析,结果应该是:

    123
    123
    321
    12423445
    321
    
    

    果不其然,结果是

  • 相关阅读:
    字典的操作用法小总结
    HTTP Headers解析
    RStdio常用快捷键
    R语言数据类型
    数据科学实战手册(R+Python)书中引用资料网址
    ggplot2使用初探
    urllib2使用初探
    R语言以及RStdio的安装
    目标检测--Selective Search for Object Recognition(IJCV, 2013)
    关于Python的lambda
  • 原文地址:https://www.cnblogs.com/hxlinux/p/13022461.html
Copyright © 2011-2022 走看看