linux shell 编程:函数 作者:马育民 • 2025-11-20 08:52 • 阅读:10001 # 提出问题 脚本里多次用到 “复杂的数学公式计算”,如:微积分、物理公式、批量处理文件,多次使用这些操作时,每次都需要写复杂的逻辑过程。 ### 解决 将其封装成函数,只需要写一次,以后使用直接调用就行 # 介绍 函数就是 **封装好的一段可重复调用的代码块** ### 定义函数 ``` function 函数名 () { 代码 return 返回值; } ``` **提示:** - `function` 可以省略 - 可以没有返回值 ### 调用函数 函数定义完后,不会自己运行,必须被调用才能执行,调用方式: ``` 函数名 ``` # 既没有形参,也没有返回值的函数 定义函数: ``` fun(){ echo "第一个函数" } ``` 调用函数: ``` fun ``` # 没有形参,有返回值的函数 返回值函数,有两种实现方式: - 函数内用 `return`,调用函数后用 `$?` 获取返回值 - **(推荐)**函数内用 `echo`,使用 `$()` 调用函数,获取返回值 ### 例子:生成随机数(使用return) 生成随机数(这里为了演示,返回固定值 `7` ) ``` test2(){ return 7 } ``` 调用函数: ``` test2 ``` 通过 `$?` 获取函数返回值 ``` echo "随机数:$?" ``` ### 注意:return 限制 `return` 只能返回 `0-255` 之间的整数,不能正确返回 **超过255的数**,也不能正确返回 **浮点数** 例子: ``` test2(){ return 256 } ``` 调用函数: ``` test2 echo "随机数:$?" ``` 就会返回 `0` ### 解决 1. 不用 `return` ,使用 `echo` 打印结果 2. 外部用 `$()` 获取 ##### 例子1:返回超过255的数 ``` test2(){ echo 256 } ``` ``` res=$(test2) echo "执行结果:$res" ``` ##### 例子2:返回浮点数 ``` test2(){ echo 3.14 } ``` ``` res=$(test2) echo "执行结果:$res" ``` # 有形参,没有返回值的函数 在做数学、物理公式运算时,需要给变量传值,函数也是同理 ### 获取形参 第一个参数:`$1` 第二个参数:`$2` 参数的数量:`$#` ### 例子 定义函数 `add`,传入加数、被加数,计算加法,并打印结果: ``` add2(){ echo "第一个参数:$1" echo "第二个参数:$2" echo "参数的数量:$# 个" echo "加法运算结果:$(($1+$2))" } add2 10 5 ``` # 有形参,有返回值的函数 这种使用最多 ### 例子 定义函数 `add`,传入加数、被加数,计算加法,返回运算结果: ``` add(){ echo "第一个参数:$1" echo "第二个参数:$2" echo "参数的数量:$# 个" echo $(($1+$2)) } ``` 调用函数,并获取返回值: ``` echo "请输入第一个数字:" read x echo "请输入第二个数字:" read y res=$(add $x $y) echo "add()执行结果:$res" ``` 原文出处:http://malaoshi.top/show_1GW2GBe14Mvy.html