一、函数概述
1.1 函数是什么
将命令序列按照格式写在一起。格式指的是函数的固定格式,有两种。
作用:方便重复使用。函数库将函数集中在一起,随时可以传参调用。可以把大的工程分割成若干个小的功能模块,提高代码的可读性。
1.2 函数的格式
1.3 return的作用
return只能写在函数的内部,用来从函数内部获取一个返回值,用来判断是否继续执行下一个脚本。echo $? 不再是判断执行结果,只是一个函数内部的返回码。
在使用return传递返回码的时候,默认0是成功,非0都是失败。
返回码的值可以自定义,返回码的范围0-255。
编写函数是可以指定return返回的值,并根据返回值对接下来的命令如何执行进行判定。
1.4 函数的传参方式
例1:
例2 :
1.5 函数变量的作用范围
在函数内部定义了全局变量,外部的传参是不能改变内部的全局变量的
例1:
例2:
例3:
解释:流程:
先定义全局变量a=9
调用函数abc,打印 inside1 $a,此处$a=9
a++ :全局变量a自增1,此处$a=10
local a :此时定义的a为函数内部变量,此处 $a 为空,打印inside2 $a为空
a=8:此处把8赋值给内部变量a,打印inside3 $a,此处$a=8
函数结束,到外部打印 outside $a,此时a为全局变量,$a=10
1.6 函数递归
递归:函数调用自己本身的函数
例1:用递归的方式实现阶乘
要注意每一次递归之后,变量$1
的值的变化。
在递归中,上一次递归的变量temp
的值为下一次递归的$1
变量。
例2:递归目录,把/opt/目录下,所有的文件递归出来,如果只是空目录就打印目录名,否则继续打印直到目录里没有文件。
要求将上个例子中递归到的所有的.txt
结尾的文件复制到/opt/dec/
目录下
1.7 函数库
函数库中只包含定义的函数,由另外一个脚本传入参数来调用我们定义的函数。
在在脚本 diaoyong.sh
中调用函数
拓展练习:要求优化上面函数库的函数,小数和整数都可以运算,小数点后两位