提出问题
脚本里多次用到 “复杂的数学公式计算”,如:微积分、物理公式、批量处理文件,多次使用这些操作时,每次都需要写复杂的逻辑过程。
解决
将其封装成函数,只需要写一次,以后使用直接调用就行
介绍
函数就是 封装好的一段可重复调用的代码块
定义函数
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
解决
- 不用
return,使用echo打印结果 - 外部用
$()获取
例子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"