您的位置:首页 > 运维架构 > Shell

【类unix系统shell基础】1.09命令组与函数

2016-01-11 15:45 274 查看
大部分资料参考于《shell十三问》,链接:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=218853&page=4#pid1511745

 

1. 命令组

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

在命令行中,有两个meta可以将多个命令集中处理,它们是()和{},但是在技术细节上却有很大差别:

():将命令组置于子shell去执行,也称 nested sub-shell,相当于用fork方式去执行命令组;

{}:在同一个shell内执行,也称为non-named command group,相当于用source方式去执行命令组。

2. 函数

(1) 所谓的函数,就是用一个名字去命名一个命令组,然后再调用这个名字去执行命令组,其实就是相当于给non-named command group加上了一个可以调用的名字。

(2) 在bash中,函数的定义方式有两种:

方式一:

function function_name {

command1

command2

command3

....

}

方式二:

fuction_name () {

command1

command2

command3

....

}

3. 取消函数

unset function_name

4. 脚本中的脚本

若我们在shell 操作中,需要不断的重复质行某些命令,我们首先想到的,或许是将命令写成脚本。不过,我们也可以写成函数,然后在命令行中打上function_name就可当一般的脚本来使用了。只是若你在shell中定义的函数 ,除了可用 unset function_name 取消外,一旦退出shell,函数也跟着取消。

然而,在 script 中使用 function 却有许多好处,除了可以提高整体 script 的执行效能外(因为已被加载),还可以节省许多重复的代码。

简单而言,若你会将多个命令写成脚本以供调用的话,那你可以将函数看成是脚本中的脚本。

一般来说,我们可以自行定义许许多多好用的脚本,再集中写在特定文件中,然后,在其它的脚本中用source将它们加载并反复执行。

RedHat Linux 中的/etc/rc.d/init.d/functions 文件就是这样的作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: