Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42218
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 14
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 08:58
文章分类
文章存档

2014年(31)

我的朋友

分类:

2014-06-13 14:19:07

原文地址:shell函数几个要点 作者:garyfujian

0.定义函数


要定义一个函数, 有下列两种方法:

function functname
{
    statements
}

functname ()
{
    statements
}
这两种定义没有任何功能上的区别, 使用后者比较简单, 和C中函数的定义是相同的.

 

调用函数
要在脚本中调用函数, 只需给出函数名. 比如要调用上面的functname(), 只需给出 functname.

bash在执行脚本时候, 若发现一个函数的定义, 则它将函数名保留, "当作一条命令", 在后面碰到该函数名时候, 它直接执行该函数. 所以, 函数一定要先定义, 再调用. 一个通常的办法是把函数定义放在脚本开始部分.

 

 

 

1.函数参数传递:

当一个函数被调用时,脚本程序的位置参数$*、$@、$#、$1、$2等会被替换为函数的参数。这也是你读取传递给函数的参数的办法。当函数执行完毕后,这些参数会恢复为它们先前的值。

Shell脚本与函数间的参数传递可利用(1)位置参数和(2)变量直接传递。变量的值可以由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. 函数内变量

 

    2.1在 bash 中,每当在函数内部创建环境变量,就将其添加到全局名称空间。这意味着,该变量将重写函数之外的全局变量,并在函数退出之后继续存在;

 

2.2 可以使用local关键字在shell函数中声明局部变量,局部变量将局限在函数的作用范围内

    2.3 脚本外也可以使用函数内变量(非local),但必须执行过函数.

   即函数可以访问全局作用范围内的其他shell变量。如果一个局部变量和一个全局变量的名字相同,前者就会覆盖后者,但仅限于函数的作用范围之内。例如,我们可以对上面的脚本程序进行如下的修改以观察发生的情况:

3. 函数返回

如果在函数里没有使用return命令指定一个返回值,函数返回的就是执行的最后一条命令的退出码

3.1 我们可以通过return命令让函数返回数字值;

 

3.2 让函数返回字符串值的常用方法是让函数将字符串保存在一个变量中,而该变量应该可以在函数结束之后被使用;

 

3.3 此外,$()来得到函数输出把函数理解成命令即可,如下所示:

 4.使用函数的好处

  若我们在shell操作中,需要不断的重复执行某些命令,我们首先想到的,或许是将命令写成命令稿(shell script)。不过,我们也可以写成function,然后在command line中打上function_name就可当一舨的script来使用了。只是若你在shell中定义的function,除了可用unset function_name取消外,一旦退出shellfunction也跟着取消。
然而,在script中使用function却有许多好处,除了可以提高整体script的执行效能外(因为已被加载),还可以节省许多重复的代码...

简单而言,若你会将多个命令写成script以供调用的话,那,你可以将function看成是script中的script ...  ^_^
而且,透过source命令,我们可以自行定义许许多多好用的function,再集中写在特定文件中,然后,在其它的script中用source将它们加载并反复执行。
若你是RedHat Linux的使用者,或许,已经猜得出/etc/rc.d/init.d/functions这个文件是作啥用的了~~~  ^_^ 

 

阅读(343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~