点击返回 自学Linux命令行与Shell脚本之路

16.1-函数概念

编写比较复杂的shell脚本时,完成具体任务的代码可能需要重复使用。bash shell提供满足这种要求的特性。
函数是被赋予名称的脚本代码块,可以在代码的任意位置重用。每当需要在脚本中使用这样代码块时,只需引用该代码块被赋予的函数名称。

1. 创建函数

在bash shell脚本中创建函数可以使用两种格式。
一种格式是使用关键字function,后跟代码块的函数名:

 function name {
commands
}
  • name属性定义了该函数的唯一名称。脚本中自定义的每个函数都必须赋予唯一的名称。
  • commands是组成函数的一条或多条bash shell命令。当调用函数是,就像在普通脚本一样,bash shell按照各条命令在函数中出现的顺序依次执行。

另一个格式,更接近一般编程语言定义函数的方式:

 name() {
commands
}
  • 函数名之后的空白园括号表明这是在定义函数。
  • 该格式的函数命名规则与前面的shell脚本函数格式相同。

2. 使用函数

  • 函数名func1每次被引用时,bashshell返回func1函数的定义并执行该函数定义的全部名
  • 函数定义不一定位于shell脚本的起始部分,但是应当小心使用。如果在函数定义之前使用函数,会得到错误消息
  • 使用函数前,需要先定义函数
  • 函数的命令需要注意。每个函数名必须唯一,否则会出问题
  • 如果重新定义函数,那么新定义将取代函数原先的定义,这不会引发错误消息

3.函数返回值

bashshell将函数看作小型脚本,并以退出状态结束。函数退出的状态有3中生成方式。

3.1 默认退出状态(不使用)
默认情况下,函数的退出状态是函数的最后一条命令返回的退出状态。函数执行完毕之后,可以使用标准变量$?来确定函数的退出状态

该函数的退出状态是2,因为最后一条命令执行失败。但无法得知函数的其他命令是否成功执行。

由于函数结尾是能够完全成功执行的echo语句,虽然有一条命令运行失败,但是函数的退出状态仍然是0。所以,使用函数的默认退出状态是一种危险的做法。

3.2  使用return命令

bash shell使用return命令以特定退出函数。return命令可以使用单个整数值来定义函数退出状态,提供一种通过编程设置函数退出状态的简单方法。
使用这种方法返回数据时,必须注意避免两个容易发生的错误:

  • 在函数完成后尽快提取返回值
  • 退出状态的取值范围是0~255

如果想要返回更大的整数值或字符串,那么不要使用这种返回值方法。

3.3  使用函数输出

函数的输出也可以捕获并存放到shell变量中。

  • 这种方法可以从函数获取任意类型的输出并给出变量赋值:result=`db1`。这条命令将函数db1的输出赋予shell变量$resutl。
  • 这个方法也可以返回浮点数和字符串值,所以这种方法能够非常灵活地从函数返回数据。
 
新函数result会用echo语句来显示计算的结果,获取dbl函数的输出,而不是查看退出状态码。

自学Linux Shell16.1-函数概念的更多相关文章

  1. 自学Linux Shell16.4-在命令行上使用函数

    点击返回 自学Linux命令行与Shell脚本之路 16.4-在命令行上使用函数 脚本函数不仅可以用作shell脚本命令,也可以用作命令行界面的命令.一旦在shell中定义了函数,可以从系统的任意目录 ...

  2. 自学Linux Shell16.2-函数中使用变量

    点击返回 自学Linux命令行与Shell脚本之路 16.2-函数中使用变量 1. 向函数传递参数 函数可以使用标准参数环境变量来表示命令行传递给函数的参数.例如,     函数名在变量$0中定义,函 ...

  3. 自学Linux Shell16.3-函数递归+创建库

    点击返回 自学Linux命令行与Shell脚本之路 16.3-函数递归+创建库 1. 函数递归 递归调用函数是指函数调用自身进行求解. 通常,递归函数有基值,函数最终递推到达该值. 许多高级数学算法使 ...

  4. 自学Linux命令行与Shell脚本之路

    自学Linux命令行与Shell脚本之路[第一回]:初识Linux   1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3  ...

  5. 自学Linux Shell6.1-环境变量概念

    点击返回 自学Linux命令行与Shell脚本之路 6.1-环境变量概念 环境变量 在Linux中,很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息: bash shell使用环境变 ...

  6. 自学Linux Shell1.3-Linux文件系统

    点击返回 自学Linux命令行与Shell脚本之路 1.3-Linux文件系统 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多种目前流行的文件系统,如EXT2. EXT3. F ...

  7. 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包

    点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...

  8. 自学Linux Shell9.4-基于Red Hat系统工具包存在两种方式之二:源码包

    点击返回 自学Linux命令行与Shell脚本之路 9.4-基于Red Hat系统工具包存在两种方式之二:源码包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方式 ...

  9. 自学Linux Shell1.1-Linux初识

    点击返回 自学Linux命令行与Shell脚本之路 1.1-Linux初识(架构.内核.shell) 1. Linux架构 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.(有 ...

随机推荐

  1. SJP's Blog

    This is SJP's blog. Here is a mirror web of his blog.

  2. 用 Python 分析咪蒙1013篇文章,她凭什么会火?

    咪蒙 文学硕士,驾驭文字能力极强.并且是一个拥有一千多万粉丝,每篇文章阅读量都   100W+,头条发个软文都能赚 80 万,永远都能抓住粉丝G点的那个女人. 1月份因为某篇文章,在网络上被一大批网友 ...

  3. CentOS6下OpenLDAP+PhpLdapAdmin基本安装及主从/主主高可用模式部署记录

    下面测试的部署机ip地址为:192.168.10.2051)yum安装OpenLDAP [root@openldap-server ~]# yum install openldap openldap- ...

  4. Visual Studio 2013版本安装

    这周老师布置了关于Visual Studio 2013版本安装过程的概述,下面我就分享给大家看吧! 首先要下载安装文件,等待下载完成之后,虽然下载文件是ios格式,但我们可以用解压缩工具解压打开.解压 ...

  5. BugPhobia终章篇章:学霸在线系统Beta阶段展示

    0x00 :序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet y ...

  6. Linux内核分析— —创建新进程的过程

    分析Linux内核创建一个新进程的过程 实验过程 要求:使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone ,验证对Linux系统创建一个新进程的理解,推荐在实验楼Linux虚拟机环 ...

  7. 语音笔记:CTC

    CTC全称,Connectionist temporal classification,可以理解为基于神经网络的时序类分类.语音识别中声学模型的训练属于监督学习,需要知道每一帧对应的label才能进行 ...

  8. throws和throw抛出异常的使用规则

    一直对java中的throws和throw不太理解.最近一直在查这两个方面的资料,算是能明白一点吧.如果我下面的观点哪有不对,希望指出来,我加以改进.         throw:(针对对象的做法) ...

  9. The Contest CodeForces - 813A (思维)

    Pasha is participating in a contest on one well-known website. This time he wants to win the contest ...

  10. PDF文档打印太慢怎么办

    如下图,用Adobe Acrobat打开PDF文件,然后[高级]-打勾[作为图像打印]即可