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 等表示.

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

#!/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 命令从函数中获取值,其语法如下 :

 
返回代码

这里代码可以是你在这里选择的任何东西,但显然你应该选择在你的脚本整体上下文中有意义或有用的东西.

示例

以下函数返回值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 ,然后输入 :

$. test.sh

这会导致读取 test.sh 中定义的函数并定义为当前shell如下 :

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

要从shell中删除函数的定义,请使用unset命令 .f 选项.此命令还用于将变量的定义移除到shell.

$ unset -f function_name