Bash函数及其使用方法:变量、参数、返回值

2021年11月19日17:44:16 发表评论 971 次浏览

介绍

如何使用Bash函数?bash 函数是一种在 shell 脚本中用于对可重用代码块进行分组的方法。此功能可用于大多数编程语言,以不同的名称为人所知,例如过程、方法或子例程。

本文提供了 bash 函数的完整概述、它们的工作原理以及如何使用它们,包括Bash函数用法示例

先决条件

  • 一个运行 Linux 的系统。
  • 访问终端和 Bash shell。
  • 一个文本编辑器写的bash脚本(引导使用VIM)。

注:该Bash(Bourne Again SHell)被认为是本教程中的默认的shell。如果你的默认 shell 不同,请尝试将#!/bin/bashshebang添加到脚本的开头。

什么是 Bash 函数?

bash 函数是一种将可重用的代码位分组到一个名称下以供以后使用的技术。bash 函数就像脚本中的脚本。

Bash函数及其使用方法:变量、参数、返回值

在 bash 脚本中使用函数有两个好处

1. 函数被直接读入shell 的内存并存储以备后用。由于现在计算机内存不是问题,因此使用函数比重复代码更快

2. 函数有助于将长的 shell 脚本组织成模块化和可重用的代码块。块更容易开发和维护

Bash函数使用教程:如何使用 Bash 函数?

Bash函数有两种实现方式:

  • 在 shell 脚本中,函数定义必须在对函数的任何调用之前。
  • 与其他 bash 别名命令一起并直接在终端中作为命令。

要使用 bash 函数,请遵循以下概述。

Bash 函数语法

有两种不同的方式来声明一个 bash 函数:

1. 使用最广泛的格式是:

<function name> () { 
        <commands> 
}

或者,相同的函数可以是一行:

<function name> () { <commands>; }

2. 编写 bash 函数的另一种方法是使用保留字function

function <function name> {
        <commands>
}

或者在一行中:

function <function name> { <commands>; }

使用函数时请注意以下行为和提示:

  • 在一行中写入时,命令必须以分号 ( ;)结尾,无论是在 bash 脚本中还是直接在终端中。
  • 添加function保留字使括号可选。
  • 花括号之间的命令{ <commands> }称为函数。主体可以包含任意数量的声明、变量、循环或条件语句。
  • 尝试为函数使用描述性名称。尽管在测试函数和命令时不是必需的,但描述性名称有助于其他开发人员查看代码的设置。

如何声明和调用函数?

如何使用Bash函数?函数在声明时不执行。函数体在声明后调用时执行。按照以下步骤创建具有各种语法选项的 bash 脚本:

1. 使用你最喜欢的文本编辑器,创建一个名为syntax的 shell 脚本。如果你使用 Vim,请在终端中运行以下行:

vim syntax.sh

2. Bash函数用法示例:在shell脚本中添加以下代码:

# syntax.sh
# Declaring functions using the reserved word function
# Multiline
function f1 {
        echo Hello I\'m function 1
        echo Bye!
}
# One line
function f2 { echo Hello I\'m function 2; echo Bye!; }

# Declaring functions without the function reserved word
# Multiline
f3 () { 
        echo Hello I\'m function 3
        echo Bye!
}
# One line
f4 () { echo Hello I\'m function 4; echo Bye!; }

# Invoking functions
f4
f3
f2
f1
Bash函数及其使用方法:变量、参数、返回值

该脚本执行以下操作:

  • 第 4-9 行演示了如何使用function保留字定义函数。该函数f1在第 4-6 行使用多行语法,而f2在第 9 行使用单行语法。
  • 第 13-18 行显示了更熟悉的语法。f3是第 13-16 行定义的多行函数,而f4第 18 行是单行函数。
  • 第 21-24 行调用之前定义的函数并执行相应函数体中的命令。调用的顺序与定义相反。

3.保存脚本并关闭 Vim:

:wq

4. 使syntax.sh文件可执行:

chmod +x syntax.sh

5. 最后,运行脚本以查看输出:

./syntax.sh
Bash函数及其使用方法:变量、参数、返回值

Bash函数使用教程:如何在终端中声明和调用函数?

在终端中声明和使用函数:

1. 打开终端并输入以下行:

my_function () { echo "Hello I'm a function"; echo "Bye!"; }

2. 通过在终端中输入函数名称来执行函数:

my_function
Bash函数及其使用方法:变量、参数、返回值

输出运行函数体中的命令。

该函数仅在当前终端会话中保持定义。要保存以备将来使用,请将代码添加到~/.bashrc文件中。

Bash 函数在哪里定义?

如何使用Bash函数?要查看 bash 函数的定义位置及其内容,请在终端中输入以下命令:

1. 在调试器模式下运行 bash shell:

bash --debugger

2. 检查函数的源文件:

declare -F <function name>

例如:

declare -F my_function
Bash函数及其使用方法:变量、参数、返回值

输出打印函数的名称、行号和函数定义所在的文件位置。

3. 要查看函数的内容,请运行:

declare -f <function name>

例如:

declare -f my_function
Bash函数及其使用方法:变量、参数、返回值

declare内置调试模式允许查看功能的内容和位置,但不运行的代码。

如何删除 Bash 函数?

如果需要释放当前终端会话中某个函数占用的命名空间,请运行:

unset <function name>

例如:

unset my_function
Bash函数及其使用方法:变量、参数、返回值

该功能在当前终端会话中不再可用。但是,如果代码在~/.bashrc文件中,则在下一个会话中一切都会恢复正常。

Bash 函数变量

Bash函数使用教程:bash 中的变量默认是全局的,可以从任何地方访问,包括函数体。函数内定义的变量也是全局的。添加关键字local使该术语只能在函数和子函数/进程中访问。

动态作用域中,当两个变量具有相同的名称时,局部变量会影响全局变量。

Bash函数用法示例 - 尝试以下 bash 脚本来演示函数变量如何在 bash 中工作:

1. 创建一个名为variable.sh的脚本:

vim variable.sh

2. 在脚本中添加以下代码:

var1=1
var2=1
change() {
        echo Inside function
        echo Variable 1 is: $var1
        echo Variable 2 is: $var2
        local var1=5
        var2=5
        echo
        echo After change inside function
        echo Variable 1 is locally $var1
        echo Variable 2 is globally $var2
}
echo Before function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
echo
change
echo
echo After function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
Bash函数及其使用方法:变量、参数、返回值

该脚本显示以下内容:

  • 第 1-2 行声明变量var1并将var2它们都设置为1.
  • 第 5-6 行位于函数体内,并将变量打印到控制台。由于变量范围是全局的,原始值打印出来。
  • 第 7 行声明了一个与全局变量同名的新局部变量var1。由于动态范围,local var1阴影全局var1值。
  • 第 8 行更改全局var2变量的值。
  • 第 14-22 行打印调用函数前后的变量值。

3. 保存脚本并退出 Vim:

:wq

4. 修改文件权限为可执行:

chmod +x variable.sh

5. 运行脚本并分析结果:

./variable.sh
Bash函数及其使用方法:变量、参数、返回值

变量值通过脚本中所做的更改打印到控制台。

Bash 函数参数

如何使用Bash函数?要将参数传递给函数,请在函数调用后添加参数,以空格分隔。下表概述了使用 bash 函数参数时的可用选项。

争论角色
$0在终端中定义时保留函数的名称。在 bash 脚本中定义时,$0返回脚本的名称和位置。
$1$2等等。对应于函数名称后参数的位置。
$#保存传递给函数的位置参数的计数。
$@ 和 $*以这种方式使用时,保持位置参数列表和功能相同。
"$@"扩展列表以分隔字符串。例如"$1", "$2",等等。
"$*"将列表扩展为单个字符串,用空格分隔参数。例如"$1 $2"等。

Bash函数使用教程:按照以下步骤测试各种参数在函数中的工作方式。

1. 创建一个名为arguments的脚本:

vim arguments.sh

2. Bash函数用法示例:在脚本中添加以下代码:

arguments () {
        echo The function location is $0
        echo There are $# arguments
        echo "Argument 1 is $1"
        echo "Argument 2 is $2"
        echo "<$@>" and "<$*>" are the same.
        echo List the elements in a for loop to see the difference!
        echo "* gives:"
        for arg in "$*"; do echo "<$arg>"; done
        echo "@ gives:"
        for arg in "$@"; do echo "<$arg>"; done
}

arguments hello world

3. 保存脚本并退出 Vim:

:wq

4. 使脚本可执行:

chmod +x arguments.sh

5. 执行脚本:

./arguments.sh
Bash函数及其使用方法:变量、参数、返回值

输出显示所使用的每个参数的描述性消息。

Bash 函数返回

Bash 函数在从函数返回值方面与大多数编程语言不同。默认情况下,bash 返回函数体中最后执行的命令的退出状态

如何使用Bash函数?下面的脚本显示了如何使用 return 指定退出状态:

1. 创建一个脚本并将其命名为test.sh

vim test.sh

2. Bash函数用法示例:在文件中添加以下函数:

test_function() {
        echo Test
        return 100
}
echo The function\'s output is: 
test_function
echo The exit status is:
echo $?

3. 保存并关闭文本编辑器:

:wq

4. 更改权限:

chmod +x test.sh

5. 运行脚本查看函数的输出和退出状态:

./test.sh

另一种方法是回显函数的结果并将输出分配给变量。使用以下代码编辑test.sh脚本:

test_function() {
        echo Test
}
result=$(test_function)
echo $result is saved in a variable for later use

这种方法模仿了大多数编程语言在使用函数时的工作方式。

Bash函数使用教程总结

完成本教程后,你应该知道如何在 bash 脚本中使用函数。接下来,使用我们的git 命令备忘单来帮助你使用 bash 函数自动执行重复的 git 任务。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: