00shell脚本函数函数是软件功能复用的基本单元。

00

shell脚本函数

函数是软件功能复用的基本单元。在实际开发中,我们常会将特定功能设计为函数,一个软件功能常由一个和多个函数的组合调用所实现。一个函数包含如下元素:

调用函数时,可将函数当作“黑盒”,调用方不须要晓得函数是怎样实现(how)的,而且须要晓得函数是做哪些的(what),调用方给函数提供形参列表,并获取函数返回值,参与调用后的业务处理。

01

快速入门

1.1创建函数

bashshell提供了两种定义shell函数的风格。

风格1:

functionname{

commands

}

风格2:

name(){

commands

}

在上述两种不同定义风格中,name为函数名称;commands由一条或多条bashshell命令构成,在被调用时,依照次序依次执行。

1.2调用函数

要在脚本中使用函数,只须要指定函数名即可。示例如下:

图片[1]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

一切看上去很简单,并且有如下注意事项:

02

函数返回值

脚本运行结束后就会返回一个退出状态码,以下将介绍三种函数退出状态码的生成方式。

2.1默认方式

默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码。在函数执行结束后,可用$?变量来获取该值:

2.2使用return命令

bashshell使用return命令来退出函数并返回特定的退出状态码。

格式:

returnn

在上述命令格式中,return为关键字;n为整数值,即退出状态码,必须在0~255之间shell脚本 变量,当n作为不在该范围的返回值时,将发生离奇现象。假如要返回一个赶超上述范围的退出状态码,请参考第3种方式。

2.3使用函数输出

正仿佛可以将命令的输出保存到shell变量中一样shell脚本 变量,我们也可以将函数的输出保存到shell变量中:

设置返回值格式:echo$result

获取返回值格式:retValue=`funcName`

在“设置返回值格式”中,可采用echo命令设置返回值;该方式不仅可以返回数值外,也可返回字符串;在实际应用强烈推荐使用该技巧。

在“获取返回值格式”中,retValue为函数的返回值;funcName为函数名称;用两个反顿号将funcName包围上去表示执行shell函数。示例如下:

图片[2]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

03

在函数中使用变量

3.1向函数传递参数

格式:func[var1][var2]…

在上述格式中,func为shell函数名称,var1、var2为传递给函数的变量(变量数量无限制);另外在调用的时侯,须要注意将函数名和参数列表置于同一行。

在函数定义的内部怎样取得变量了?shell函数可以使用标准的参数环境变量来代表命令行上传给函数的参数:

3.2变量的作用域

图片[3]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

按照变量的作用域,我们将变量分为两种类型:

(1)全局变量

默认情况下,在脚本中定义在函数外部的任何变量都是全局变量。全局变量是在shell脚本中任何位置都有效的变量。在函数内定义的变量作用域仅限于本函数内。

图片[4]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

如上例所示,我们在函数外定义了全局变量result;在函数内部定义了局部变量var。因此,运行脚本后,我们在函数外部难以访问到局部变量var的值。

(2)局部变量

假如我们在函数中更改了全局变量,这么就实现了该变量的永久性更改;依据该特点,我们容易掉进一个坑:我们本不想在函数中更改全局变量,并且不留神了定义了和全局变量名称一致的变量,并对该值进行了更改,这么也就相当于对全局变量进行了更改。

基于此,shell提供了定义局部变量的方式:只要在变量申明的后面加上local关键字即可。local关键字保证了变量只局限在该函数中;假如脚本中该函数之外有同样的名子的变量,这么shell将会保持这两个变量的值是分离的。

图片[5]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

04

链表变量和函数

4.1向函数传链表参数

传递格式:${array[*]}

获取格式:(`echo”$@”`)

在上述格式中array为链表名称,以下为典型应用示例:

图片[6]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

4.2从函数返回链表

格式:echo${array[*]}

在上述格式中array为链表名称,以下为典型应用示例:

图片[7]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

05

函数递归

递归是一种特殊的算法函数。以下通过阶乘运算来说明怎样编撰一个递归函数。

图片[8]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

06

创建函数库

bashshell容许用户将多个函数写入一个文件,该文件即为函数库文件;该文件由多个shell函数组成,当我们须要调用那些函数时,只须要在脚本中引用该函数库文件即可。

第一步:创建函数库libs

图片[9]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

libs为函数库名称;用户可以依据实际情况进行命名。

第二步:导出函数库

函数库文件创建好之后,可以通过两种方式导出函数库;完成导出之后即可直接调用。

图片[10]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

注意:

为了愈加便捷地调用shell函数,我们可以充分借助.bashrc文件。可通过以下两种途径实现:

以上两种方法将在每次启动新shell时就会加载自定义函数,这样我们可以十分便捷的在控制台终端或shell脚本中直接调用那些自定义函数(而不再须要在shell脚本中再度导出函数库文件)

07

小结

综上,本文对函数创建、函数调用、函数返回值、函数变量、递归函数、函数库进行了介绍。在下文中,我们将会进阶到命令行编辑器。敬请期盼!

OneMoreThing

推荐1:

上文1:

上文2:

近日,我和活跃在业界的一线技术老司机们共同开通了知识星球,——一个与公众号有别,但又一脉相承的技术圈、认知圈:公众号会一如既往地进行知识分享,知识星球则坚持关注解决问题与动手实践,主要涉及Java前端、Linux、Python、Android等技术领域,问题很广、方法好多、思绪很快,希望我们能否在这儿伫足思索、交流、沉淀、提升。

你负责认真,我们负责帮你解决问题,让改变发生;欢迎你们扫码加入我们的星球。期盼2018,在程序猿成长的公路上,共同进化!

图片[11]-00shell脚本函数函数是软件功能复用的基本单元。-唐朝资源网

© 版权声明
THE END
喜欢就支持一下吧
点赞247赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容