Bash 中的函数
本篇文章通过使用不带 function
关键字的函数和带 function
关键字的函数来解释 Bash 中的基本函数及其在 Bash 脚本中的用法。
Bash 中的函数
Bash 中的函数是一组完成特定任务的命令。我们可以一遍又一遍地使用函数;这有助于避免重复编写同一组命令。函数还使脚本更具可读性。
通常,函数接收数据、处理数据并返回一个值。但是,在 bash 脚本中,函数只返回最后一个命令的退出状态。
退出状态是 0
和 255
之间的任何值。退出状态 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
命令将两个数字 3
和 7
相加,并将总和分配给 var
变量。echo
命令将 var
变量的值显示到标准输出。
带有函数名称的最后一行用于调用函数以执行。
#!/bin/bash
function add(){
var=`expr 3 + 4`
echo $var
}
add
Bash 函数中的变量范围
在 Bash 中,默认情况下所有变量都是全局变量。我们可以在 Bash 脚本的任何地方访问全局变量,甚至在函数内部。在函数内部定义的变量也是 Bash 中的全局变量。
要在 Bash 中的函数内定义局部变量,我们使用 local
关键字。
下面的脚本通过定义全局变量 x
和 y
以及 add
函数中的一个称为 sum
的局部变量来演示变量范围。
#!/bin/bash
x=2
y=4
function add(){
local sum
sum=`expr $x + $y`
echo $sum
}
add
在上面的脚本中,变量 x
和 y
是全局变量。我们可以在脚本的任何地方访问这些。变量 sum
是一个局部变量,因为已使用 local
关键字来定义它。
我们只能访问定义的函数体内的局部变量。在这种情况下,局部变量 sum
只能在 add
函数的主体内使用。在 add
函数体之外访问局部变量 sum
将引发错误。
Bash 函数中的返回值
Bash 函数在调用其他编程语言中的函数时不会返回值。Bash 函数仅返回要执行的最后一个命令的退出状态。
退出状态可以是 0
和 255
之间的任何值。退出状态 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
相关文章
如何在 CentOS 中获取 IP 地址
发布时间:2023/05/04 浏览次数:108 分类:操作系统
-
这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Bash 中创建进度条
发布时间:2023/05/04 浏览次数:164 分类:操作系统
-
这是有关在 Bash 中创建进度条以显示正在运行的命令或进程的进度的指南。本文将探讨在 Bash(Linux 和 macOS 的默认 shell)中向 shell 脚本添加进度条的几种方法。使用 pv 命令在 Bash 中创建进度条