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

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

目录

在 Shell 脚本中定义函数

定义函数的基本语法就是函数名后跟圆括号。 见 example 以下。

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 美元$@ 它会打印出所有传递给它的参数。 简单的?

使用函数返回值

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

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

#!/bin/bash
new_function() {
    echo "Hi! How's it going?"
    echo "I was invoked with $@"
   return 1
}

new_function HowLinux Example
echo $?
Bash 函数返回值

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

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

类似于我们从外部调用函数的方式,我们可以从函数内部调用另一个函数。 在下面 example,我使用传递给 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”的局部值与全局值完全不同。 但是变量名是一样的。

结论

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