Chinaunix首页 | 论坛 | 博客
  • 博客访问: 367091
  • 博文数量: 83
  • 博客积分: 5322
  • 博客等级: 中校
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 11:27
个人简介

爱生活,爱阅读

文章分类

全部博文(83)

文章存档

2015年(1)

2013年(1)

2012年(80)

2011年(1)

分类: LINUX

2012-03-02 19:13:20

 

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------收集于网络:网中人---shell 十三问》----------------------------------

--------------------------------------------------------------------------------------------------------------------------------

嗯,这次轻松一下,不讲太多...

先说一下,为何要用 ( ) { } 好了。

许多时候,我们在 shell 操作上,需要在一定条件下一次执行多个命令,也就是说,要么不执行,要么就全执行,而不是每次依序的判断是否要执行下一个命令。或是,需要从一些命令执行优先次顺中得到豁免,如算术的 2*(3+4) 那样。这时候,我们就可引入"命令群组"(command group)的概念:将多个命令集中处理。

shell command line 中,一般人或许不太计较 ( ) { } 这两对符号的差异。虽然两者都可将多个命令作群组化处理,但若从技术细节上,却是很不一样的:

l  ( ) command group 置于 sub-shell 去执行,也称 nested sub-shell

l  { } 则是在同一个 shell 内完成,也称为 non-named command group

若你对上一章的 fork source 的概念还记得了的话,那就不难理解两者的差异了。

要是在 command group 中扯上变量及其它环境的修改,我们可以根据不同的需求来使用 ( ) { }

通常而言,若所作的修改是临时的,且不想影响原有或以后的设定,那我们就 nested sub-shell ,反之,则用 non-named command group

是的,单从 command line 来看,( ) { } 的差别就讲完了,够轻松吧。

然而,若这两个 meta 用在其它 command meta 或领域中( Regular Expression),还是有很多差别的。只是,我不打算再去说明了,留给读者自己慢慢发掘好了。

我这里只想补充一个概念,就是 function 。所谓的 function ,就是用一个名字去命名一个  command group ,然后再调用这个名字去执行 command group

non-named command group 来推断,大概你也可以猜到我要说的是 { } 了吧?

bash 中,function 的定义方式有两种:

方式一:

 

function function_name {

    command1

    command2

    command3

    ....

}

 

方式二:

 

fuction_name() {

    command1

    command2

    command3

    ....

}

用哪一种方式无所谓,只是若碰到所定意的名称与现有的命令或别名(Alias)冲突的话,方式二或许会失败。但方式二起码可以少打 function 这一串英文字母,对懒人来说(如我),又何乐不为呢?

function 在某一程度来说,也可称为"函式",但请不要与传统编程所使用的函式(library)搞混了,毕竟两者差异很大。惟一相同的是,我们都可以随时用"已定义的名称"来调用它们...

若我们在 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 这个文件是作啥用的了~~~

 

 

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