在本章中,我们将详细讨论shell函数。 函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。
编程序时在需要的时侯调用这些函数来执行其各自的任务。Shell 函数必须先定义后使用。使用函数执行重复性任务是现代面向对象编程的重要组成部分。
Shell 函数的定义格式如下:
function_name () { list of commands [ return value ] }
也可以在函数名前加上关键字 function:
function function_name () { list of commands [ return value ] }
函数返回值,可以利用return语句;如果不加,会将最后一条命令运行结果作为返回值。
将参数传递给函数
您可以定义一个在调用函数时接受参数的函数。 这些参数将由$ 1,$ 2等表示。
下面是一个示例,其中我们传递了两个参数Zara和Ali,然后捕获并在函数中打印这些参数。
# Define your function here Hello () { echo "Hello World $1 $2" } # Invoke your function Hello Zara Ali
函数return值
如果从函数内部执行退出命令,则不仅是终止函数的执行,而且还终止调用该函数的Shell程序的执行。
相反,如果您只想终止函数的执行,您可以使用以下语法的return命令从函数中返回任何值:
return code
在这里,code可以是您在此处选择的任何内容。但是,您最好选择在整个脚本上下文中有意义或有用的内容。
例如
下列函数return值10
#!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$? echo "Return value is $ret"
函数嵌套
函数更有趣的功能之一是它们可以调用自己以及其他函数。 调用自身的函数称为递归函数。
#!/bin/sh # Calling one function from another number_one () { echo "This is the first function speaking..." number_two } number_two () { echo "This is now the second function speaking..." } # Calling function one. number_one
执行结果:
This is the first function speaking... This is now the second function speaking...
像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,如下所示:
$ unset -f function_name