Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。

Shell 中的函数和C++、Java、Python、C# 等其它编程语言中的函数类似,只是在语法细节有所差别。

Shell 函数定义的语法格式如下:

function name() {
    statements
    [return value]
}

对各个部分的说明:

  • function是 Shell 中的关键字,专门用来定义函数;
  • name是函数名;
  • statements是函数要执行的代码,也就是一组语句;
  • return value表示函数的返回值,其中 return 是 Shell 关键字,专门用在函数中返回一个值;这一部分可以写也可以不写。

{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。

函数定义的简化写法

如果你嫌麻烦,函数定义时也可以不写 function 关键字:

name() {
    statements
    [return value]
}

如果写了 function 关键字,也可以省略函数名后面的小括号:

function name {
    statements
    [return value]
}

我建议使用标准的写法,这样能够做到“见名知意”,一看就懂。

函数调用

调用 Shell 函数时可以给它传递参数,也可以不传递。如果不传递参数,直接给出函数名字即可:

name

如果传递参数,那么多个参数之间以空格分隔:

name param1 param2 param3

不管是哪种形式,函数名字后面都不需要带括号。

和其它编程语言不同的是,Shell 函数在定义时不能指明参数,但是在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数。

Shell 也不限制定义和调用的顺序,你可以将定义放在调用的前面,也可以反过来,将定义放在调用的后面。

实例演示

1) 定义一个函数,输出 Shell 教程的地址:


  1. #!/bin/bash
  2. #函数定义
  3. function url(){
  4. echo "http://c.biancheng.net/shell/"
  5. }
  6. #函数调用
  7. url

运行结果:
http://c.biancheng.net/shell/

你可以将调用放在定义的前面,也就是写成下面的形式:


  1. #!/bin/bash
  2. #函数调用
  3. url
  4. #函数定义
  5. function url(){
  6. echo "http://c.biancheng.net/shell/"
  7. }

2) 定义一个函数,计算所有参数的和:


  1. #!/bin/bash
  2. function getsum(){
  3. local sum=0
  4. for n in $@
  5. do
  6. ((sum+=n))
  7. done
  8. return $sum
  9. }
  10. getsum 10 20 55 15 #调用函数并传递参数
  11. echo $?

运行结果:
100

$@表示函数的所有参数,$?表示函数的退出状态(返回值)。

Shell函数详解(函数定义、函数调用)相关推荐

  1. 【C 语言】C 语言 函数 详解 ( 函数本质 | 顺序点 | 可变参数 | 函数调用 | 函数活动记录 | 函数设计 ) [ C语言核心概念 ]

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  2. fread函数详解 函数原型

    函数原型: size_t   fread(   void   *buffer,   size_t   size,   size_t   count,   FILE   *stream   )    b ...

  3. 【蓝牙sbc协议】sbc源码阅读笔记(四)——sbc_encode函数详解

    sbc_encode函数详解 函数定义: // sbc.c SBC_EXPORT ssize_t sbc_encode(sbc_t *sbc, const void *input, size_t in ...

  4. C库函数之 strtol函数详解

    strtol函数详解 函数声明 base为0的情况 endptr的妙用 函数声明 long int strtol (const char* str, char** endptr, int base); ...

  5. shell脚本——shell函数详解

    shell脚本--shell函数详解 一.shell函数 1.shell函数的概念 2.shell函数的格式 (1)函数的定义 (2)调用函数的方法 3.函数返回值 4.函数传参 5.函数变量的作用范 ...

  6. makefile详解 函数 foreach if call origin shell

       makefile详解 函数 foreach if call origin shell 控制make函数 四.foreach 函数 foreach函数和别的函数非常的不一样.因为这个函数是用来做循 ...

  7. linux 系统函数调用脚本文件,Linux系统调用fsync函数详解

    Linux系统调用fsync函数详解 发布时间:2013-11-14 19:55:10   作者:佚名   我要评论 Linux fsync函数主要用于将同步内存中所有已修改的文件数据到储存设备,多用 ...

  8. python中plt定义,对Python中plt的画图函数详解

    1.plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明: 'best' : 0, (only implemented for axes legends)(自适应 ...

  9. linux下wait函数,Linux wait函数详解

    wait和waitpid出现的原因 SIGCHLD --当子进程退出的时候,内核会向父进程SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) --子进程退出时,内核将 ...

  10. 函数指针与回调函数详解

    函数指针与回调函数详解 1.什么是函数指针? 函数(的)指针就是指针.这个指针存放一个函数的地址,而函数的名称就该函数的入口,即地址.这类似于数组名就是数组的首地址.我们可以通过反汇编直观的查看到函数 ...

最新文章

  1. Dockerfile指令详解:WORKDIR 指定工作目录
  2. Matlab中画图以及plot函数及legend函数详解
  3. Qt-qwidget项目入门实例
  4. 20165235 Java第一周学习总结
  5. apache camel_使用WildFly 8在Java EE7中自举Apache Camel
  6. 7-2 多项式求和 (10 分)
  7. OpenWrt 学习网址
  8. camera(17)---设置摄像头方向、打开线程与预览线程、设置参数、Camera外设按键、自动对焦与触摸对焦、拍照、人脸检测、位置管理、旋转管理、变焦、录像
  9. [HNOI2015]开店
  10. 云计算解码:技术架构和产业运营
  11. Android studio 下载SDK
  12. word 转换pdf 插件
  13. linux中ldd命令查看二进制文件(程序或库)所依赖的其他库(LIBTIFF_4.0未定义的引用问题)
  14. ZigBee协议栈(一)--协议栈介绍
  15. Symbian OS 源码下载方式
  16. oracle 逗号连接表是相当于什么
  17. html多个背景音乐自动播放,多个背景音乐同时自动播放?
  18. linux内核page结构体的PG_referenced和PG_active标志
  19. 微信公众号开发相关问题
  20. 【 SAP消息号BS013】

热门文章

  1. linux只提取前两个目录名,Linux技巧:介绍从目录路径获取文件名和目录前缀的方法...
  2. php公用一个尾部,19.2 共用显示部分 - 19.2.2 共用尾部页面 - 《零基础学PHP+MySQL (零基础学编程)》 - D云...
  3. linux php ldap扩展,php_ldap域集成模块安装-159
  4. oracle快速导出1t数据,使用sqluldr2快速高效大批量导出Oracle数据
  5. html video标签问题,用HTML5 video标签的一系列问题
  6. 北京工业大学计算机科学与技术研究生,北京工业大学研究生专业介绍:计算机科学与技术...
  7. php6 配置,thinkphp6路由可选参数配置
  8. mysql怎么导出所有的表名称_MYSQL导出表名(navicat 导出表名称)
  9. Mybatis Plus 是如何实现动态 SQL 语句的?原理你懂吗?
  10. 还在用Jenkins?看看这些替代方案,是否更适合你!