Bash函数本质上是一组可以多次调用的命令。函数主要是为了帮助自己使bash脚本制作更加具有可读性,并避免编写反复地编码。
与绝大多数电子计算机语言对比,Bash函数水准十分不够。在教学中,我们在这里详解Bash函数基本知识,同时向大伙儿呈现如何在shell脚本中运用她们。
声明bash函数的句法非常简单。她们能通过两个不同格式声明。第一种格式以函数名称逐渐,脚后跟括号。这必不可少与更比较常见的格式。
function_name () {
commands
}
单行线版本信息:
function_name () { commands; }
第二种格式以function
保留字逐渐,脚后跟函数名。
function function_name {
commands
}
单行线版本信息:
function function_name { commands; }
花括号{}
正中间的命令文件目录是函数的关键。重点围绕函数论的花括号必须通过空格符或回车符与主体分隔。
定义函数根本无法推行它。要开启bash函数,只需运用函数名称。只需在shell脚本中开启函数,就会推行函数论的命令。
一定要在开启一切函数之前定义函数。运用单行线函数时,分号;
必须遵循函数中的最后一个命令。您应该从始至终尝试保持函数名称的描述性。
要更好地理解这一点,客户程序以下案例:
1 #!/bin/bash
2
3 hello_world () {
4 echo 'hello, world'
5 }
6
7 hello_world
内行人3
中,我们通过命名方式来定义函数,并且用花括号{
标志函数论的慢慢。行4
是函数体。函数体可以有好多命令。
行5
,结束花括号}
,定义hello_world
函数末尾。内行人7
我们正在推行该函数。您可以根据需要多次推行该函数。假如你运行该脚本制作,这将会打印出hello, world
。
变量修饰符
全局性变量是可以从脚本制作中的任何位置访问的变量,与修饰符范围无关紧要。在Bash中,默认情况下所有变量都定义为全局性变量,哪怕是在函数内部构造声明也是如此。
能用local
关键字在函数身体中声明一部分变量,并且一定要在该函数内部使用。我们可以在不同种类的函数中运用一样名称的一部分变量。
为了更好地说明变量修饰符范围在Bash中原理,让大家都充分考虑一个例子:
#!/bin/bash
var1='A'
var2='B'
my_function () {
local var1='C'
var2='D'
echo "Inside function: var1: $var1, var2: $var2"
}
echo "Before executing function: var1: $var1, var2: $var2"
my_function
echo "After executing function: var1: $var1, var2: $var2"
脚本制作最开始定义2个全局性变量var1
和var2
。接着就是一个设置一部分变量var1
并修改全局性变量的函数var2
。
假如你运行该脚本制作,您应该看到以下导出来:
Before executing function: var1: A, var2: B
Inside function: var1: C, var2: D
After executing function: var1: A, var2: D
从上面的导出来中,我们可以得出结论。如果是在函数身体中设置一个一部分变量,其名称与现有全局性变量的名称一样,则这将会在于全局性变量。也可以在函数内变动全局性变量。
传参
与真正意义上编程语言中的函数不一样,Bash函数不能你一直在开启的时候会传参。
当bash函数结束后,其传参是函数中推行的最后一个语句情况,0
说明取得成功和非0
十进制数在1 - 255范围内说明失败。
能用return
关键字特殊返回状况,并将其分到全局性变量$?
。return
语句会终止函数。你们可以将其视为函数的退出状况。
能从函数中返回随便具体数值,大家应该使用多种方式。简单选择就是将函数得出的结论分到全局性变量。
从函数获得传参的另一个比较强选择是运用echo或printf
将值发送到标准输出stdout
。
#!/bin/bash
my_function () {
echo "some result"
return 55
}
my_function
echo $?
some result
55
#!/bin/bash
my_function () {
local func_result="some result"
echo "$func_result"
}
func_result="$(my_function)"
echo $func_result
some result
大伙儿开展的函数不是单纯的地将信息内容打印出到标准输出,反倒是运用$()
体系分到变量func_result
。运用此方法func_result
变量将贮存函数得出的结论。
Bash函数基本参数
要将随便总数传送数据给bash函数,只需将她们放进函数名称后面,用空格符分隔就能。最好是做法得用冒号将基本参数转义,以降低风险地使用带空格符的参数。
传输的参数可以通过变量$1
,$2
,$3
... $n
,查找1...n
对应于基本参数在函数名后部位。
$0
变量储存给函数的名称。$#
变量贮存传递给函数的位置参数或者主要参数数量。$*
或$@
变量贮存传递给函数的所有位置参数或者基本参数。
#!/bin/bash
greeting () {
echo "Hello $1"
}
greeting "Joe"
Hello Joe
结论
到这里,您应该更好的了解如何编写bash函数。您可能还想把握如何使用Bash函数为很长的命令创建可回忆的快捷命令。
如果您有任何问题或意见和建议,请随时。
