第十六章、Shell 函数

什么是函数

函数是一段具有特定功能的命令块,它允许你为这段命令块定义一个名称(即函数名),并通过这个名称来调用这段命令。

函数一次定义就可以重复调用。

1. 函数的定义和调用

函数定义的官方语法

function name { COMMANDS ; }
# 或者
name () { COMMANDS ; }

将上述一行整理成多行,即成为如下语法:

语法格式:

function 自定义函数名 {
    命令块
}

自定义函数名 {
    命令块
}

语法说明:

函数调用的语法

函数名 [参数1] [参数2] ...

语法调用语法说明:

示例:

定义一个控制全自动洗衣机洗衣服流程的函数 washing_machine,用它来提示洗衣服的全过程(这里我们使用 echo 命令代替控制过程)。

washing_machine() {
    echo "放入衣服"
    echo "注水"
    echo "洗涤20分钟"
    echo "排水"
    echo "甩干"
    echo "报警提示完成"
}

函数调用

washing_machine

执行结果

放入衣服
注水
洗涤20分钟
排水
甩干
报警提示完成

上述的洗衣机程序只能洗涤 衣服, 我们可以重新定义 washing_machine 函数,让其能接收一个参数(洗涤的物品)。

改写上述程序,加入一个形参 $1,让此函数能够洗涤不同的衣物。

washing_machine() {
    echo "放入 $1"
    echo "注水"
    echo "洗涤20分钟"
    echo "排水"
    echo "甩干"
    echo "报警提示完成"
}

#  调用函数 washing_machine 并传入对应的参数
washing_machine "羽绒服"
washing_machine "床单"

执行结果

放入 羽绒服
注水
洗涤20分钟
排水
甩干
报警提示完成
放入 床单
注水
洗涤20分钟
排水
甩干
报警提示完成

这样我们的函数就能根据不同的参数执行不同的操作了。

练习:

写一个 函数 is_leap_year, 此函数需要传入一个参数 year 表示年份,这个函数判断这个年份是闰年还是平年,然后打印出来。

闰年有两种情况:

  1. 能被 400 整除的年份是闰年。
  2. 能被 4 整除,但不能被 100 整除的年份也是闰年。
  3. 其他年份是平年。