在本章中,我们将详细讨论Shell函数。函数使您可以将脚本分解成多个小的代码函数,有利于代码复用。
创建函数
要声明一个函数,只需使用以下语法-
function_name () { list of commands }
函数的名称为 function_name ,这就是您将要从脚本其他位置调用它的名称。函数名称后必须带有括号,并在括号内包含命令列表。
函数示例
以下示例显示了功能的使用-
#!/bin/sh# 定义函数 Hello () { echo "Hello Learnfk" }
# 调用函数 Hello
执行后,您将收到以下输出-
$./test.sh Hello Learnfk
函数参数
您可以定义一个接收参数的函数。这些参数将由 $1 , $2 等表示。
下面是一个示例,其中我们传递了两个参数 Learnfk 和 Toolfk ,然后在函数中捕获并打印这些参数。
#!/bin/sh# 定义函数 Hello () { echo "Hello World 2" }
# Invoke your function Hello Learnfk Toolfk
执行后,您将收到以下输出-
$./test.sh Hello World Learnfk Toolfk
函数返回值
如果从函数内部执行 exit 命令,则其作用不仅是终止函数的执行,而且还终止调用该函数的Shell程序的执行。
相反,如果您只想终止函数的执行,则可以通过一种方法来定义函数。
根据情况,您可以使用 return 命令从函数中返回任何值-
return code
以下函数返回值10-
#!/bin/sh# 定义函数 Hello () { echo "Hello World 2" return 10 }
# 调用函数 Hello Learnfk Toolfk
# 获取上一条命令返回的值 ret=$?
echo "Return value is $ret"
执行后,您将收到以下输出-
$./test.sh Hello World Learnfk Toolfk Return value is 10
嵌套函数
函数的更有趣的功能之一是它们可以调用自己以及其他函数。调用自身的函数称为 递归函数 。
以下示例演示了两个函数的嵌套-
#!/bin/sh# Calling one function from another number_one () { echo "This is the first function speaking..." number_two }
number_two () { echo "This is now the second function speaking..." }
# Calling function one. number_one
执行后,您将收到以下输出-
This is the first function speaking... This is now the second function speaking...
Prompt 函数调用
您可以将常用功能的定义放在 .profile 中。这些定义在您每次登录时都可用,并且可以在命令提示符下使用它们。
或者,您可以将定义分组到一个文件中,如 test.sh ,然后通过键入以下内容在当前shell中执行该文件:
$. test.sh
这具有导致读取 test.sh 内部定义的函数并将其定义到当前shell的效果,如下所示-
$number_one This is the first function speaking... This is now the second function speaking... $
要从Shell中删除函数的定义,请使用带有 .f 选项的unset命令。此命令还用于将变量的定义删除到Shell程序。
$unset -f function_name