shell函数几个要点
时间:2009-08-27 来源:garyfujian
1.函数参数传递:
当一个函数被调用时,脚本程序的位置参数$*、$@、$#、$1、$2等会被替换为函数的参数。这也是你读取传递给函数的参数的办法。当函数执行完毕后,这些参数会恢复为它们先前的值。
Shell脚本与函数间的参数传递可利用位置参数和变量直接传递。变量的值可以由Shell脚本传递给被调用的函数,而函数中所用的位置参数$1、$2,等对应于函数调用语句中的实参,这一点是与普通命令不同的。
#func is a function name
# it echos the values of variables and arguments
func( )
{
echo "Let's begin now. "
echo $a $b $c
echo $1 $2 $3
echo "The end. "
}
a=" Working directory "
b="is"
c=`pwd`
func Welcome You Byby
echo "Today is ` date ` "
2. 函数内变量
可以使用local关键字在shell函数中声明局部变量,局部变量将局限在函数的作用范围内。
脚本外也可以使用函数内变量,但必须执行过函数.
此外,函数可以访问全局作用范围内的其他shell变量。如果一个局部变量和一个全局变量的名字相同,前者就会覆盖后者,但仅限于函数的作用范围之内。例如,我们可以对上面的脚本程序进行如下的修改以观察发生的情况:
3. 函数返回
如果在函数里没有使用return命令指定一个返回值,函数返回的就是执行的最后一条命令的退出码
我们可以通过return命令让函数返回数字值。让函数返回字符串值的常用方法是让函数将字符串保存在一个变量中,而该变量应该可以在函数结束之后被使用。此外,你还可以echo一个字符串并捕获其结果,如下所示:
4.使用函数的好处
若我们在shell操作中,需要不断的重复执行某些命令,我们首先想到的,或许是将命令写成命令稿(shell script)。不过,我们也可以写成function,然后在command line中打上function_name就可当一舨的script来使用了。只是若你在shell中定义的function,除了可用unset function_name取消外,一旦退出shell,function也跟着取消。
然而,在script中使用function却有许多好处,除了可以提高整体script的执行效能外(因为已被加载),还可以节省许多重复的代码...
简单而言,若你会将多个命令写成script以供调用的话,那,你可以将function看成是script中的script ... ^_^
而且,透过上一章介绍的source命令,我们可以自行定义许许多多好用的function,再集中写在特定文件中,然后,在其它的script中用source将它们加载并反复执行。
若你是RedHat Linux的使用者,或许,已经猜得出/etc/rc.d/init.d/functions这个文件是作啥用的了~~~ ^_^