Shell 脚本 101:Shell 脚本中的函数

在学习了我们之前教程中关于 if-else 语句、switch-case 语句等的基础知识之后,是时候在 shell 脚本中创建函数了。 函数帮助我们将脚本划分为不同的部分,并使代码更具可移植性和可重用性。

在 Shell 脚本中定义函数

定义函数的基本语法就是函数名后跟圆括号。 请参见下面的示例。

function_name(){     code and variables to work with } 

现在您知道如何定义函数了,让我们开始创建一些真正的函数。 您现在可能有一个问题: 你如何将参数传递给你的函数?

Bash 函数已经准备好接受参数。 它们应该以与我们传递 shell 参数的方式类似的方式传递。 让我们看几个例子来理解这一点。

将参数传递给 Bash 函数

#!/bin/bash new_function() {     echo "Hi! How's it going?"     echo "I was invoked with $1 $2" }  new_function HowLinux Example 
Bash 函数

如您所见,我使用“Howlinux Example”调用了该函数,并自动将其传递给该函数。 现在我可以传递无限的函数,但由于函数不知道如何处理其余的参数,这些参数不会被打印出来。

那么我们如何打印出任意数量的参数呢? 我们将简单地替换 1 美元 2 美元[email protected] 它会打印出所有传递给它的参数。 简单的?

使用函数返回值

好的,现在我们不仅需要对给定参数执行任务的函数,而且还需要返回值并弄清楚如何使用它们。

这也很容易。 为此,我们需要 美元? 运算符,它存储此运算符之前的命令的返回值。

#!/bin/bash new_function() {     echo "Hi! How's it going?"     echo "I was invoked with [email protected]"    return 1 }  new_function HowLinux Example echo $? 
Bash 函数返回值

如您所见,捕获并打印了返回值 1。 另一种方法是将返回值分配给一个变量(默认情况下可以跨代码全局访问),然后在脚本中使用该变量。

从 Shell 脚本中的其他函数调用函数

与我们从外部调用函数的方式类似,我们可以从函数内部调用另一个函数。 在下面的示例中,我使用传递给 function1 的参数调用第二个函数 (function2) 并向其添加 1。 详细了解如何对变量执行操作。

#!/bin/bash function1() {         echo "this is function 1 $1"         function2 $(($1+1)) }  function2() {         echo "This is function 2 $1" }  function1 5 
Bash 递归函数Bash 递归函数

Bash 函数中的变量范围

大多数编程语言都为我们提供了变量作用域的功能。 就像许多语言一样,变量的默认声明可以全局访问。 为了使变量只能在函数中访问,许多编程和脚本语言都提供了范围关键字。 让我们看一下范围关键字 bash.

#!/bin/bash  A="This is global value for A"  function1() {         local A="This is local value for A"         B="This is global and local value for B"         echo $A         echo $B } function1 echo $A echo $B 
shell 脚本中的函数 bash 变量Bash 变量范围

在上述脚本中使用“local”关键字后,“A”的局部值与全局值完全不同。 但是变量名是一样的。

结论

您现在应该很容易为自己转向一些高级脚本。 为自己创建一些脚本。 制作多个函数,甚至可以尝试使用相互调用的函数为您的函数创建一个循环。 这将是一个有趣的项目,您将在此过程中学到很多东西。 希望本教程对您有用。