Bash 中的函数

Fumbani Banda 2023年1月30日 2022年5月11日
  1. Bash 中的函数
  2. 在 Bash 中定义函数
  3. 示例函数
  4. Bash 函数中的变量范围
  5. Bash 函数中的返回值
  6. 将参数传递给 Bash 函数
Bash 中的函数

本教程通过使用不带 function 关键字的函数和带 function 关键字的函数来解释 Bash 中的基本函数及其在 Bash 脚本中的用法。

Bash 中的函数

Bash 中的函数是一组完成特定任务的命令。我们可以一遍又一遍地使用函数;这有助于避免重复编写同一组命令。函数还使脚本更具可读性。

通常,函数接收数据、处理数据并返回一个值。但是,在 bash 脚本中,函数只返回最后一个命令的退出状态。

退出状态是 0255 之间的任何值。退出状态 0 表示命令已成功执行。

在 Bash 中定义函数

在 Bash 中,有两种符号来声明函数。第一种表示法使用带括号的函数名称,后跟花括号,如下所示。

name_of_function(){
  command1
  command2
}

上面的符号也可以写成一行。

name_of_function(){command1; command2} 

第二种表示法使用 function 关键字声明函数,后跟括号和花括号,如下所示。

function name_of_function(){
  command1
  command2
}

我们还在一行中声明了该函数,如下所示。

function name_of_function(){command1; command2}

示例函数

下面的脚本演示了在 bash 脚本中使用函数。首先,我们定义函数,然后通过调用它来执行它。下面的脚本使用第一种语法,即使用函数名后跟括号和大括号。

我们定义了一个名为 greet 的函数;花括号表示函数的主体。我们在函数体内有两个 echo 语句,将文本打印到标准输出。

要在 Bash 中调用函数,请键入函数的名称。下面脚本的最后一行调用函数 greet

#!/bin/bash

greet(){
   echo  "Hello, World!"
   echo  "Bash is Fun!"
}

greet

该脚本将以下输出打印到标准输出。

Hello, World!
Bash is Fun!

下面的 bash 脚本使用 function 关键字后跟函数名称 add 来定义一个函数。add 函数使用 expr 命令将两个数字 37 相加,并将总和分配给 var 变量。echo 命令将 var 变量的值显示到标准输出。

带有函数名称的最后一行用于调用函数以执行。

#!/bin/bash
function add(){
   var=`expr 3 + 4`
   echo $var
}

add

Bash 函数中的变量范围

在 Bash 中,默认情况下所有变量都是全局变量。我们可以在 Bash 脚本的任何地方访问全局变量,甚至在函数内部。在函数内部定义的变量也是 Bash 中的全局变量。

要在 Bash 中的函数内定义局部变量,我们使用 local 关键字。

下面的脚本通过定义全局变量 xy 以及 add 函数中的一个称为 sum 的局部变量来演示变量范围。

#!/bin/bash

x=2
y=4

function add(){
   local sum
   sum=`expr $x + $y`
   echo $sum
}

add

在上面的脚本中,变量 xy 是全局变量。我们可以在脚本的任何地方访问这些。变量 sum 是一个局部变量,因为已使用 local 关键字来定义它。

我们只能访问定义的函数体内的局部变量。在这种情况下,局部变量 sum 只能在 add 函数的主体内使用。在 add 函数体之外访问局部变量 sum 将引发错误。

Bash 函数中的返回值

Bash 函数在调用其他编程语言中的函数时不会返回值。Bash 函数仅返回要执行的最后一个命令的退出状态。

退出状态可以是 0255 之间的任何值。退出状态 0 表示命令已成功执行。我们可以通过打印 $? 的值来访问退出状态。

当调用 add 函数时,它会执行其主体内的命令。第一行将 expr 命令的结果赋给 sum 变量。

第二行使用 echo 命令将 sum 变量的值打印到标准输出。最后一行将退出状态值打印到标准输出。

打印的退出状态是先前执行的命令的退出状态;退出状态代码用于显示 sum 变量值的 echo 命令。

#!/bin/bash

add(){
    sum=`expr 2 + 3`
    echo "Sum: $sum"
    echo "Exit Status: $?"
}

add

执行脚本会向标准终端显示以下输出。

Sum: 5
Exit Status: 0

将参数传递给 Bash 函数

要将参数传递给 bash 函数,请在调用函数时将参数放在以空格分隔的函数名旁边。 $n 表示法可以访问参数。

n 表示参数在函数名旁边的位置。在我们的例子中,$1 代表第一个参数 1$2 代表第二个参数 2

function add(){
   sum=`expr $1 + $2`
   echo $sum
}

add "1" "2"

变量 $0 保留表示函数名,而 $# 存储传递给函数的位置参数的数量。

上面的脚本将以下输出生成到标准输出。

3
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub