• shell编程(六):函数


    1、概述

    大家好,我是欧阳方超,今天记录一下shell中函数的定义与调用。

    2、函数

    2.1、定义函数的语法

    函数可以实现功能的复用,定义函数的语法如下:

    functionname() {
    command
    return value
    }
    
    • 1
    • 2
    • 3
    • 4

    或者

    function functionname() {
    command
    return value
    }
    
    • 1
    • 2
    • 3
    • 4

    或者

    function functionname {
    command
    return value
    }
    
    • 1
    • 2
    • 3
    • 4

    上面的三种写法都是定义了一个名为functionname的函数,其中:
    function关键字是可选的,当使用了function关键字后,函数名后的圆括号也可以不写;
    functionname是函数名;
    command是调用函数时要执行的命令,可以有很多语句;
    return value表示函数的返回值,return是关键字,return语句在可写也可不写;

    2.2、函数定义实例演示

    创建firstFunc.sh脚本,里面写入如下内容:

    #!/bin/bash
    
    function sing {
        echo "I am singing!"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3、函数调用

    可以给函数传参也可以不传参,在shell中,函数是否有参数不是在定义函数时决定的,而是在函数调用时决定的,比如上面定义的sing()函数,定义时在其圆括号中并没有写任何参数,但在调用时却可以传递参数。
    调用函数不传参数的场景,下面的示例中对sing()函数直接调用并且不传参

    #!/bin/bash
    
    function sing {
        echo "I am singing!"
    }
    
    
    echo "--begin--"
    sing 
    echo "--end--"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    下面的示例中对sing()函数调用并且传参,如果传多个参数互相之间用空格隔开即可,如果某个参数本身就带空格,该类型的参数需要用单引号或双引号引起来,注意在shell中,$1表示shell脚本本身的名称,$1、$2、$3……$n用以接收传递给函数的第一个、第二个、第三个参数……第n个参数,

    #!/bin/bash
    
    function sing {
        echo $1 "I am singing!"
    }
    
    echo "--begin--"
    sing Hi
    echo "--end--"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    3、shell函数返回值

    shell中函数的返回值比较特别,返回值表示函数的退出状态,其范围只能是0至255之间的数字,0表示成功,其他值都表示失败。如果函数中没有显式的return语句,那么就使用函数的退出状态(也就是最后一条命令的退出状态)作为返回值,此时如果要写上return语句,可以这么写return $?,其中$?是一个特殊的变量,用来获取上一条命令的退出状态。

    4、总结

    shell中函数的定义与其他编程语言类似,只是在调用时才能体现出传参、不传参的问题,还有shell中函数的返回值有其自身特点,与其他语言亦有区别。
    我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。

  • 相关阅读:
    CSDN 每日一练 小鱼的航程(改进版)
    如何辨认是否是高防服务器?
    express学习5-构建模块化路由2
    Machine learning week 9(Andrew Ng)
    vue之若依分页组件的导入使用(不直接使用若依框架,只使用若依分页组件)
    加密接口如何测试
    localhost和127.0.0.1都可以访问项目,但是本地的外网IP不能访问
    QTableWidget通过QSS美化
    java毕业生设计众筹平台网站计算机源码+系统+mysql+调试部署+lw
    着力提升制造业核心竞争力,仪器仪表产业迎高质量发展
  • 原文地址:https://blog.csdn.net/u012288582/article/details/126260878