📜  Unix / Linux-Shell函数

📅  最后修改于: 2020-10-31 14:56:04             🧑  作者: Mango


在本章中,我们将详细讨论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

从函数返回值

如果从函数内部执行退出命令,则其作用不仅是终止函数的执行,而且还终止调用该函数的Shell程序的函数。

如果您只是想终止函数的执行,则可以通过定义的函数来解决。

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

return 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...
$

要从外壳中删除函数的定义,请使用带有.f选项的unset命令。此命令还用于将变量的定义删除到外壳程序。

$ unset -f function_name