自学Linux Shell16.1-函数概念
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。
- 这个方法也可以返回浮点数和字符串值,所以这种方法能够非常灵活地从函数返回数据。

自学Linux Shell16.1-函数概念的更多相关文章
- 自学Linux Shell16.4-在命令行上使用函数
点击返回 自学Linux命令行与Shell脚本之路 16.4-在命令行上使用函数 脚本函数不仅可以用作shell脚本命令,也可以用作命令行界面的命令.一旦在shell中定义了函数,可以从系统的任意目录 ...
- 自学Linux Shell16.2-函数中使用变量
点击返回 自学Linux命令行与Shell脚本之路 16.2-函数中使用变量 1. 向函数传递参数 函数可以使用标准参数环境变量来表示命令行传递给函数的参数.例如, 函数名在变量$0中定义,函 ...
- 自学Linux Shell16.3-函数递归+创建库
点击返回 自学Linux命令行与Shell脚本之路 16.3-函数递归+创建库 1. 函数递归 递归调用函数是指函数调用自身进行求解. 通常,递归函数有基值,函数最终递推到达该值. 许多高级数学算法使 ...
- 自学Linux命令行与Shell脚本之路
自学Linux命令行与Shell脚本之路[第一回]:初识Linux 1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3 ...
- 自学Linux Shell6.1-环境变量概念
点击返回 自学Linux命令行与Shell脚本之路 6.1-环境变量概念 环境变量 在Linux中,很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息: bash shell使用环境变 ...
- 自学Linux Shell1.3-Linux文件系统
点击返回 自学Linux命令行与Shell脚本之路 1.3-Linux文件系统 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多种目前流行的文件系统,如EXT2. EXT3. F ...
- 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包
点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...
- 自学Linux Shell9.4-基于Red Hat系统工具包存在两种方式之二:源码包
点击返回 自学Linux命令行与Shell脚本之路 9.4-基于Red Hat系统工具包存在两种方式之二:源码包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方式 ...
- 自学Linux Shell1.1-Linux初识
点击返回 自学Linux命令行与Shell脚本之路 1.1-Linux初识(架构.内核.shell) 1. Linux架构 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.(有 ...
随机推荐
- C# 双击ListView出现编辑框可编辑,回车确认
原文:C# 双击ListView出现编辑框可编辑,回车确认 //获取鼠标点击的项------API [DllImport("user32")] public static exte ...
- 马加爵遗书 VS 药家鑫遗书
前言:今天是贰零壹柒年最后一个工作日,亦是2017年12月29日,因为明天就放元旦假了,公司同事比往常相对轻松些.中午吃完午饭,在办公室大家有说有笑,有人说姓马的人都挺牛X啊,比如:马云, ...
- CF [2016-2017 ACM-ICPC CHINA-Final][GYM 101194 H] Great Cells
很久以前做的一道思博题了,今天来补一补. 大致题意:在一个\(n*m\)的矩阵内填整数,数字在\([1,k]\)范围内.矩阵中某格的数为great number当且仅当与它同行同列的数字都严格比它小. ...
- VS2017一步一步断点调试解决Dapper语句出现的Bug
最近再做一个项目,出现一个小bug,bug虽小,但是却要命啊.下面我show下我解决问题的方法. View层代码: @model List<mhq.Blog.Model.Blog> < ...
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [二] 基本使用
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 使用环境 Visual Studio 2017 .NET ...
- Webpack 2 视频教程 003 - Webpack 项目初始化
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- Linux内核分析——字符集总结与分析
一. 设置修改系统.应用默认字符集 1. 查看虚拟机的字符集: 由此可见,该虚拟机的字符集为zh_CN.UTF-8. 2. 查看服务器支持的编码方式 3. 修改字符集类型 上图可见,LANG字符 ...
- 《软件工程》小组团队项目-小学生四则运算APP(First Sprint)
<软件工程>团队项目我们小组选择了小学生四则运算APP,在上学期原有的项目基础上进行更新升级.(自我感觉我们团队上学期的小学生四则运算APP是较为成功且实用的,不过这学期学习到了新的知识, ...
- MyEclipse项目里面出现红叉的解决方案?
一般出现在从别处import的项目上,只有项目文件夹上有红叉,其他地方都正常,现总结个人的几个解决方案: 有几种可能: 1,编码设置是否一致,也即是你项目原来的编码和现在eclipse用的默认编码 ...
- sublime text3修改默认配置文件是失败的解决方法
如果你修改sublime text3的默认配置文件Preferences.sublime-settings失败,现实的错误信息如下图: 其实根据提示信息就好找问题出在哪里了:权限 要想成功的修改默认配 ...