linux shell 编程:函数

提出问题

脚本里多次用到 “复杂的数学公式计算”,如:微积分、物理公式、批量处理文件,多次使用这些操作时,每次都需要写复杂的逻辑过程。

解决

将其封装成函数,只需要写一次,以后使用直接调用就行

介绍

函数就是 封装好的一段可重复调用的代码块

定义函数

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"

原文出处:/show_1GW2GBe14Mvy.html