一种 巴什 函数是一组用于在脚本中执行特定任务的命令。 可以在脚本中的任何位置重复使用此函数以多次执行该特定任务。 该函数需要一遍又一遍地编写相同的代码,只需编写一次并每次调用它,从而节省了我们的时间。
在本教程中,我们将看到 bash 函数并学习如何在 shell 脚本中使用它们。
简单的功能
创建函数很容易,并且可以用两种格式编写。
语法 1
此格式以函数名称开头,后跟括号。
function_name () { <commands>; } function_name
语法 2
此格式以语法函数开头,后跟函数名称。
function function_name () { <commands>; } function_name
笔记
- 两种语法都应该可以正常工作,并且没有功能差异。
- 分号是可选的
- 要执行函数,您必须在 shell 脚本中需要时使用函数名称 (function_name) 调用函数
创建一个 shell 脚本 hello_world.sh
使用以下代码。
#!/bin/bash #Basic Function #Function Name func_helloworld () { #commands echo "Hello World"; } #Invoking Function func_helloworld #Reusing Function func_helloworld func_helloworld
让我们用 bash 贝壳。 运行上述函数将产生以下输出。
[[email protected] ~]# chmod +x hello_world.sh [[email protected] ~]# ./hello_world.sh Hello World Hello World Hello World [[email protected] ~]#
将参数传递给 Bash 函数
我们可能并不总是想要一个简单的静态函数。 有时,我们需要函数来为我们处理输入,就像我们将参数传递给 bash shell 提示符中的命令。
在函数中,我们在脚本中调用函数后提供参数。
第一个参数在函数中称为 $1,第二个参数称为 $2,依此类推。
#!/bin/bash #Passing Arguments to a function func_welcome () { echo Hello $1 Welcome to $2 } #Calling a Function with Parameters func_welcome Raj ITzGeek
让我们用 bash 贝壳。 运行上述函数将产生以下输出。
[[email protected] ~]# chmod +x arguments.sh [[email protected] ~]# ./arguments.sh Hello Raj Welcome to ITzGeek [[email protected] ~]#
变量范围
有两种类型的变量
全局变量
全局变量是可以从脚本中的任何地方调用的变量,无论它是在函数内部还是外部定义的。 在 Bash 中,所有变量默认都是全局变量。
var_name=<var_value>
局部变量
局部变量在函数 {} 中使用关键字 local 定义。 局部变量作用域是有限的,只能在该函数内工作。
local var_name=<var_value>
让我们创建一个包含全局和局部变量的脚本,看看它们在函数内部和外部是如何工作的。
#!/bin/bash #Variable Scope #Global Variable var1='X' var2='Y' func_varscope () { #Local Variable local var1='Z' #Gloabl Variable var2='A' echo "Inside a Function: var1 is $var1 and var2 is $var2" } echo "Before Calling a Function: var1 is $var1 and var2 is $var2" func_varscope echo "After Calling a Function: var1 is $var1 and var2 is $var2"
上面的脚本首先定义了两个全局变量 var1 和 var2,然后在函数内部定义了一个局部变量 var1 和另一个同名的全局变量 var2。
让我们用 bash 贝壳。
Before Calling a Function: var1 is X and var2 is Y Inside a Function: var1 is Z and var2 is A After Calling a Function: var1 is X and var2 is A
如果你看到上面的输出,
在函数内部设置一个与现有全局变量相同的局部变量会修改全局变量的值,并且只对函数进行修改。 在函数外,变量值等于全局变量。
函数内的全局变量可以修改函数外的全局变量。
返回值
其他编程语言返回函数的值,而 Bash 函数在调用时不返回值。 但是,Bash 函数允许我们设置返回状态。
我们可以使用关键字 return 来指定返回状态。
#!/bin/bash func_returnvalues () { echo "some results" return 55 } func_returnvalues echo $?
让我们用 bash 贝壳。
some results 55
如果要返回函数的实际值,我们需要将函数的结果赋给一个变量。
全局变量
#!/bin/bash func_returnvalues () { func_result="some result" } func_returnvalues echo $func_result
让我们用 bash 贝壳。
some result
局部变量
#!/bin/bash func_returnvalues () { local func_result="some result" echo $func_result } func_result=$(func_returnvalues) echo $func_result
让我们用 bash 贝壳。
some result
结论
在 Bash 脚本中创建函数很容易。 在脚本中使用函数可以在需要时重用它们,从而为您节省大量时间。 保持你的 Bash 函数尽可能简单,如果你在脚本中发现了一个大的函数,那么将一个大的函数分解成更小的函数。