欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

LinuxShell脚本——函数

程序员文章站 2022-04-12 11:34:53
LinuxShell脚本——函数 摘要:本文主要学习了Shell中函数的定义和使用。 函数的定义 Shell函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。 函数定义的语法 Shell函数定义的语法格式如下: 对各个部分的说明: 由 {} 包围的 ......

linuxshell脚本——函数

摘要:本文主要学习了shell中函数的定义和使用。

函数的定义

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

函数定义的语法

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

1 function 函数名() {
2     命令
3     return 返回值
4 }

对各个部分的说明:

1 function:shell中的关键字,专门用来定义函数。
2 return:shell关键字,专门用在函数中返回一个值,这一部分可以写也可以不写。

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

函数定义的简化写法

函数定义时也可以不写function关键字:

1 函数名() {
2     命令
3     return 返回值
4 }

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

1 function 函数名 {
2     命令
3     return 返回值
4 }

函数调用

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

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

调用函数不传递参数

如果不传递参数,直接给出函数名字即可:

1 函数名

调用函数传递参数

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

1 函数名 参数1 参数2 参数3

函数的返回值

return关键字

在大部分编程语言中,返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果就通过return语句返回。

但是shell中的return语句表示的是函数的退出状态:返回值为0表示函数执行成功了,返回值为非0表示函数执行出错了。if、while、for等语句都是根据函数的退出状态来判断条件是否成立。

shell函数的返回值只能是一个介于0~255之间的整数,其中只有0表示成功,其它值都表示失败。

函数执行失败时,可以根据返回值(退出状态)来判断具体出现了什么错误,比如一个打开文件的函数,我们可以指定1表示文件不存在,2表示文件没有读取权限,3表示文件类型不对。

如果函数体中没有return语句,那么使用默认的退出状态,也就是最后一条命令的退出状态。更加严谨的写法为:

1 return $?

其中, $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值。

获取返回值

想得到函数的处理结果,有两种解决方案:

1)借助全局变量,将得到的结果赋值给全局变量。

2)在函数内部使用echo、printf命令将结果输出,在函数外部使用 $() 或者 `` 捕获结果。

使用举例

1)借助全局变量获取返回值

这种方案的弊端是定义函数的同时还得额外定义一个全局变量,如果我们仅仅知道函数的名字,但是不知道全局变量的名字,那么也是无法获取结果的。

 1 #!/bin/bash
 2 sum=0
 3 function dosum(){
 4     sum=$(($1+$2))
 5     return $?
 6 }
 7 if dosum 2 3 
 9     echo "sum = $sum"
10 else
11     echo "error"
12 fi

2)在函数内部使用echo输出结果

使用 $() 捕获echo的输出结果,结果将不会输出到终端上。除了 1 $() ,也可以使用 `` 来捕获echo的输出结果。

1 #!/bin/bash
2 function dosum(){
3     echo $(($1+$2))
4     return $?
5 }
6 sum=$(dosum 2 3)
7 echo "sum = $sum"