写一个又大又复杂的程序的技巧之一,就是将该程序分解成一些称之为子程序的小程序,而在每一个子程序中,又可以把重复出现的代码组织到一起形成一个函数。
函数和子程序执行的是主程序某一特定的任务。我们要做的工作就是写一个主程序,当需要某一个函数和子程序的时候就调用它们。
本章先了解函数。
在编写Linux程序的时候,有时不得不一遍又一遍地重写某些相同的命令。例如,给朋友写一份邀请信,请他们来参加一个狂欢舞会。可把这些信息写在一个for in循环中,并将每个朋友的名字放在一个单词表中。当然,也可以把每一份邀请信都写进程序中,只不过是将内容重写几次罢了。或者使用一个函数。
函数(function)是Linux程序的一部分,与程序的其余部分是分开的。试设想一下:一个函数就像程序中的一个分隔仓。我们先给一个函数取一个惟一的名字(即函数名),然后就可以把经常要使用的一条或多条命令放入函数之中。
当linux需要使用存放在函数中的命令时,可以在程序中键人该函数的名字。因此,通过使用函数名就可以重复使用函数中的命令,而不必再重写这些命令。譬如,把那些邀请词放在一个函数中。
在每次调用函数时,可以给函数传递一定的信息。这个过程称之为给函数传递参数。因此,可以创建一个打印邀请信的函数,每调用它一次,就给函数传递一个名字,而函数则会自动地把名字赋给函数中的某个变量。以后,当涉及到那位朋友的时候,代表他的就是一个变量,而不是他的名字。
通常使用函数来处理传递给函数的某些信息,然后,将处理结果返回到程序的调用处。函数处理后返回的结果称之为返回值(return value)。我们可以在程序中利用这个返回值。
如果需要重写某段代码,就可以使用函数来代替它。
function display { echo "Welcome to the world" echo "of functios" }
通过函数调用,Linux会自动寻找该函数的定义,并执行其中的每一条指令。
在程序执行到闭大括号“}”后,Linux返回到调用函数的下一行,并继续执行其他的指令。
下面是函数调用的一个典型例子:
#!/bin/bash clear function display echo "Welcome to the world" echo "of functions. " } display
请看下面的例子:
#!/bin/bash clear function verify { if [$1 -eq "Bob" ]&&[$2 -eq "555"] then echo "Verified" eise echo "Rejected" fi } verify Bob 555
#!/bin/bash clear function verify { if [$# -ne 2] then echo "Wrong number of arguments!" else if[$1 -eq "Bob"] &&[$2 -eq "555"] then echo "Verified" else echo "Rejected" fi fi } verify Bob 555
#!/bin/bash clear function verify { if [$# -ne 2] then echo "Wrong number of arguments!" else if[$1 -eq "Bob"]&&[$2 -eq "555"] then echo "Verified" else echo "Rejected" fi fi } export verify subprogram1现在对加在函数定义之后的两行说明如下:
#!/bin/bash clear verify "Bob" "555"
#!/bin/bash clear function verify { if [$# -ne 2] then return 1 else if [$1 -eq "Bob"]&&[$2 -eq "555"] then return 0 else return 2 echo "Rejected" fi fi } verify Bob 555 case $? in do 0) echo "Verified" ;; 1) echo "Wrong number of arguments!" ;; 2) echo "Rejected" ;; done