Bash脚本之函数定义和调用

把那些在脚本中重复出现并且没有任何改变的代码,封装起来,在适当的场景中调用执行。程序员将这种被封装起来的代码称为功能体,或者叫模块,也称为函数。这样看来是不是和循环类似,循环也是为了方便去多次执行一堆代码,而函数是将一堆代码写在一起,起一个名字,然后在需要这堆代码的时候只需要写上函数的名字即可。在shell脚本编程中,函数是由若干条shell命令组成的语句块,函数里面的内容和shell程序形式上是一致的。不同之处就是,shell代码可以直接被执行,而函数中的内容,不能独立执行,只有被调用的时候才执行。比如:

#!/bin/bash
out(){
echo "123"
}
[[email protected] class]# bash hanshu 
[[email protected] class]#

在上面这个例子中,我在脚本中写入了一个函数,但是没有去调用它,所以在执行这个脚本后,没有任何的输出。接下来说一下如何去定义一个函数。

函数是由函数名称和函数体(能够实现独立功能的shell语句块)两部分组成,格式为:

function func_name {
函数体
}

或者:

func_name() {
函数体
}

注意:函数名和()之间不能加空白字符

这两种不同的定义方法都可以定义函数,不同点在于函数名字前的“function”这个命令,这个命令可有可无。定义函数不一定非得在脚本中定义,还可以在交互式环境下定义,比如在命令行中直接输入函数名来定义,例如:

[[email protected] class]# out()
> {
> echo "123"
> }
[[email protected] class]# out
123

在定义的时候,一个函数以“{”开始,以“}”结束,在定义完成后就可以直接使用名字来调用这个函数。可以使用“set”命令来查看自己定义的和系统内已经存在的函数,使用unset命令可以撤销已经定义的函数。值得注意的是在当前shell内定义的函数只能在当前shell中使用,一旦关闭,那么定义的函数就会消失。同理,在脚本中定义的函数会随着脚本的关闭而消失,比如:

testEcho(){
echo "执行了show函数"
}
[[email protected] class]# bash testfunction 
[[email protected] class]# testEcho
bash: testEcho: 未找到命令...
[[email protected] class]# source testfunction 
[[email protected] class]# testEcho
执行了show函数

在这个例子中我们可以看到,当使用bash执行脚本之后在脚本内加载了“testEcho”这个函数但是随着这个脚本的关闭,再执行这个函数的时候就会报错了,而之后我又使用了“source”命令来执行这个脚本之后,在当前shell内就可以使用脚本内定义的函数了。这是一种在当前shell中使用脚本内函数的方法。

像命令一样,函数的执行也会有一个返回值,分为以下两种:

第一种是函数的执行结果的返回值,例如在函数体中某些命令输出的结果;

第二种是函数的状态返回值:

1.函数中最后一条命令的执行状态返回值;

2.自定义退出状态码:

return [n]

n:0-255 (1 2 127尽可能不使用)

0: 表示无错误返回

1-255:有错误返回

注意:跟其他编程语言一样,只要函数在执行时,遇到了return命令,不管函数中的命令语句是否全部执行完成,立刻退出函数。一个函数从被调用开始,直到遇到return命令或全部的语句执行完才终止。

在调用函数的时候我们也可以将一些参数传入进去,方法是在调用函数的时候直接在函数名后头写上参数,使用空格隔开,比如:func_name arg1 arg2 ...。在函数体中,可以使用$1,$2,..等位置变量来调用外部调用此函数时为此函数提供的参数,和脚本一样,还可以使用$*或[email protected]的方式引用所有位置参数或者使用$#计算为函数传递的参数个数。举例如下:

#!/bin/bash
out(){
echo [email protected]
}
out a b c #在这里调用函数,并将“a b c ”作为参数传到函数中
[[email protected] class]# bash funcdiaoyong
a b c
时间: 2024-10-13 17:41:56

Bash脚本之函数定义和调用的相关文章

实验八——函数定义及调用总结

实验八--函数定义及调用总结 1.本次课学习到的知识点: (1)void为不反回结果的函数,且void不能省略,否则默认为int,函数体中没有表达式的return语句,也可省略return. (2)不返回结果的函数在定义.调用.参数传递.函数声明上,思路与以前相同,适用于把一些确定的.相对独立的程序功能封装成函数. (3)局部变量:定义在函数的内部,且有效作用范局部变量一般定义在函数或复合语句的开始处,围局限于所在的函数内部,形参是局部变量. (4)不能定义在中间位置. (5)全局变量:定义在函

第9课 - 函数定义及调用

第9课 - 函数定义及调用 1. makefile中的函数 (1)make 解释器提供了一系列的函数供 makefile 调用 (2)在 makefile 中支持自定义函数实现,并调用执行 (3)通过 define 关键字实现自定义函数 2. 在makefile中自定义函数 (1)自定义函数的语法 其中,$(0) 代表被调用的函数名,$(1) , $(2) , $(3) ... 代表调用函数时后面的传参 (2)深入理解自定义函数 - 自定义函数是一个多行变量,无法直接调用 - 自定义函数是一种过

函数 定义与调用

为什么要用函数 函数的定义与调用 函数的返回值 函数的参数 本章小结 返回顶部 为什么要用函数 现在python届发生了一个大事件,len方法突然不能直接用了... 然后现在有一个需求,让你计算'hello world'的长度,你怎么计算? 这个需求对于现在的你其实不难,我们一起来写一下. s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) 好了,功能实现了,非常完美.然后现在又有了一个需

函数定义及调用(八)

在 makefile 中是支持函数的概念的,make 解释器提供了一系列的函数供 makefile 调用.在 makefile 中支持自定义函数实现,并调用执行:提供 define 关键字实现自定义函数.下面是自定义函数的语法 我们再来深入地看看自定义函数,自定义函数是一个多行变量,无法直接调用:其次自定义函数是一种过程调用,没有任何的返回值:自定义函数用于定义命令集合,并应用规则中.下来我们还是以代码为例来进行说明 .PHONY : test define func1     @echo "M

make--变量 条件判断 函数定义及调用

一.变量的高级主题 A.变量值的替换1.使用指定字符(串)替换变量中的后缀字符(串)2.语法格式:$(var:a=b) (将a替换成b)a.替换表达式中不能有任何的空格b.make中支持使用${}对变量进行取值示例 src:=a.cc b.cc c.cc obj:=$(src:cc=o) test: @echo "obj=>$(obj)" 输出结果由上图可以看出变量值的替换B.变量的模式替换1.使用%保留变量值中的指定字符,替换其它字符2.语法格式:$(var:a%b=x%y)a

python 函数定义和调用

一.python 函数的分类: 1.内置函数 2.标准库函数 3.第三方函数 4.用户自定义函数 函数定义和调用 在使用函数之前必须先定义函数,执行def时,会创建一个函数对象并绑定到函数名变量上,定义函数的语法格式如下: def 函数名(形参列表):    //由零条到多条可执行语句组成的函数    [return [返回值]] 示例: 二.返回值: return 返回值要点: 1.如果函数体中包含return 语句,则结束函数执行并返回值: 2.如果函数体中包含return语句,则返回Non

shell 函数定义和调用

一. 函数定义 语法: [function] functionname[()]{     action;     [return int;] } 说明: 1.可以带function fun()  定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. return后跟数值n(0-255 #!/bin/sh build(){     echo $1, $2;     return $(($1+$2)) } b

实验七——函数定义及调用总结

1.本次课学习到的知识点: 函数 (1)定义:函数是一个完成特定工作的独立程序模块,包括函数和自定义函数两种: 1.scanf(),printf()等为库函数,由c语言系统提供定义,编程时只要直接调用即可. 2. cylinder(),fact()函数,需要用户自己定义,为自定义函数. (2)cylinder(),fact()功能不同,但他们能实现一个计算,并可以得到一个明确的计算结果. (3) 函数定义的一般形式为: 函数类型    函数名(形式参数表) { 函数实现过程 } (4)函数部首:

实验八--函数定义及调用总结

本次课学习到的知识点: 函数分成库函数和定义函数两种,库函数在编程是可以直接调用,定义函数需要自己定义,他们也有共同的特点就是能实现一个运算,并且得到一个明确的计算结果. 函数首部由函数类型,函数名和形式参数组成,位于函数定义的第一行,形参用于给出函数计算所要的函数结果和返回类型,形参表中各个形参用逗号分隔. 实际参数可以是常量,变量,表达式.形参必须是变量. 形参和实参必须一一对应,由实参一一传递给形参. 试验中遇到的问题及解决办法: 在金字塔的实验中进入了死循环,最后发现没有添加scanf语