Shell函数概念
Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。
Shell函数的优点
- 使用函数可以避免代码重复
- 使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强
Shell函数定义
#方式一:
function 函数名 {
命令序列
}
#方式二:
函数名() {
命令序列
}
函数返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
- 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
- 退出状态码必须是0~255,超出时值将为除以256取余
由于返回的值有限制,如果值大于255,还是用echo输出值。输出时,结果先赋给一个变量获取函数结果,然后对结果进行输出。
传递参数的方式
采用位置变量($1、$2、$3...)方式获取脚本命令行传入的参数
注意
- 函数体内部的$1、$2...代表的是调用函数时函数后面跟的位置参数
- 函数体外面的$1、$2...代表的是执行脚本时脚本后面跟的位置参数
通过用户的输入给脚本传参
实操一:使用函数输出菱形
使用函数输出菱形,并且可以通过输入数值大小改变菱形的大小
-
用函数分别定义输出上半部分和下半部分的函数
-
调用函数,通过read获取参数参给函数
-
完成测试
函数变量的作用范围
-
函数在Shell脚本中仅在当前shell环境中有效
-
Shell脚本中变量默认全局有效
-
将变量限定在函数内部使用local命令
递归
函数调用自己本身的函数。
具体来说就是把规模大的问题转化为规模小的相似的子问题来解决。由于解决大问题的方法和解决小问题的方法往往是同一个方法,所以函数就会调用它自身。重要的是,解决问题的函数必须有明显的结束条件,不然就会无限递归。
递归的应用
阶乘
脚本内容:
解析:
-
判断输入的正整数是否是1,由于1的阶乘就为一,无需计算,直接输出结果即可。
-
将获取的变量的数值减一,并将减一后的数值再运用本函数进行阶乘计算,最后该变量乘减一后的阶乘结构,得到最终结果。
其中,当NUM变量大于0时,会不断调用本身函数,直到NUM为1结束,再不断返回结果。 -
主代码中,将函数运行的结果赋给一个变量,输出该变量的值。
运行结果:
递归目录
脚本内容:
解析:
-
for循环遍历该目录,判断是文件还是目录,如果是目录,再次调用函数本身,直到是文件为止
-
如果是文件,就输出为文件
-
主代码调用函数
运行结果:
函数库
shell函数库其实也是一个脚本,其中包含了多个函数,这些函数适用性强,在其他脚本中可直接调出使用。
创建函数库文件
创建一个脚本文件作为函数库,在里面写入一些适用性较高的函数。
调用函数库文件
由于 . 和source是在当前shell环境运行脚本,所以用这种方式运行函数库文件,在当前脚本中就能直接调用函数库的函数。