Unix/Linux - Shell 函数



在本章中,我们将详细讨论 Shell 函数。函数使您能够将脚本的整体功能分解成更小、更逻辑的子部分,然后可以在需要时调用它们来执行其各自的任务。

使用函数执行重复性任务是创建**代码重用**的绝佳方法。这是现代面向对象编程原则的重要组成部分。

Shell 函数类似于其他编程语言中的子程序、过程和函数。

创建函数

要声明一个函数,只需使用以下语法:

function_name () { 
   list of commands
}

您的函数名称为**function_name**,您将使用它从脚本中的其他位置调用它。函数名后面必须跟括号,然后是括在大括号中的命令列表。

示例

以下示例演示了函数的使用:

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

执行后,您将收到以下输出:

$./test.sh
Hello World

向函数传递参数

您可以定义一个函数,该函数在调用函数时接受参数。这些参数将由**$1**、**$2**等表示。

以下是一个示例,我们传递两个参数ZaraAli,然后我们在函数中捕获并打印这些参数。

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

执行后,您将收到以下结果:

$./test.sh
Hello World Zara Ali

从函数返回值

如果您从函数内部执行**exit**命令,其效果不仅是终止函数的执行,还会终止调用该函数的 Shell 程序的执行。

如果您只想终止函数的执行,则有一种方法可以退出已定义的函数。

根据情况,您可以使用**return**命令从函数返回任何值,其语法如下:

return code

这里**code**可以是您选择的任何内容,但显然您应该选择在整个脚本的上下文中具有意义或有用的内容。

示例

以下函数返回一个值 10:

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
   return 10
}

# Invoke your function
Hello Zara Ali

# Capture value returnd by last command
ret=$?

echo "Return value is $ret"

执行后,您将收到以下结果:

$./test.sh
Hello World Zara Ali
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...

从提示符调用函数

您可以将常用函数的定义放在您的**.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
广告