免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1222 | 回复: 0
打印 上一主题 下一主题

shell-func [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-11 13:08 |只看该作者 |倒序浏览

               
               
               
               
1:运行一个脚本可以用以下两种方法:第一种方法, source scriptname 用这种方法运行的脚本只是在当前shell中去顺序调用脚本中的命令,但是必须保证系统能够找到对应的脚本(可以是在当前目录下或将路径加到搜索目录之中)。第二种方法,就是为脚本增加可执行属性,然后将它当成一个命令来执行,这种方式执行的脚本系统会重新开一个子shell去执行脚本程序,而 父shell则等侍子shel结束后得到控制权。或使子shell在后台执行,这样父shell不用等侍,用这样形式scriptname &
所以如果一个函数在一个脚本文件中被声明,然后以可执行文件的方式进行此脚本,则脚本执行完之后就不能更使用这个函数了。因为这个函数是在子进程里被声明的,子进程出后在父进程就不能找到这个函数的声明了。而如果以source读取这个脚本文件的方式运行的话,这个函数的声明仍是存在的,可以被父进程继续使用。
函数和脚本的两点区别:函数运行不会单独重新启动一个进程,而脚本会。第二如果有一个脚本的名称和一个函数的名称一样的,则函数优先执行。
脚本 alias 氶函数 内嵌命令的执行优先级(指的是同名的函数脚本及alias):
1:aliase
2:函数或if for 等关键字
3:函数
4:内嵌命令 如cd type
5:脚本及可执行程序
可以用type name 来查看最高优先级的实现,用type -all 来查看所有的实现,还可以用 type -type name来查看name的类型是alias 或buildin或其它。
2:函数
函数从两个方面极大的改进了shell的处理能力,第一,当用一个函数时,它是存放在内存中的,所以执行速度更快。第二,使编写的程序模块化,易于维护。
函数定义:
function func-name{
    shell commanders
} 或
func-name () {
    shell commanders
}
可以使用如下命令取消函数的定义:
unset -f func-name;
可以用如下命令查看已经定义的函数:
declare -f (列出已经定义的函数及实现)
declare -F (只列出已经定义的函数名称)
位置参数,脚本本身可以用位置参数$0引用,位置参数$*是一个用IFS隔开的字符串,而$@相当于“$1”“$2”“$N”,即它相1当于N个用空格隔开的字符串,如果没有位置参数,则$@是空的。$#表示位置参数的个数。
与C语言不同的是,脚本里的变量具有全局性:如果在一个函数里改变了一个在脚本里声明的变量的值,则在函数外这个变量的值是已经被改变过后的值。在写大的程序时,要想不被改变一个函数内部变量的值,可以使用局部变量,即在函数里变量的前面加一声明:local var。另外,$0的值就是运行脚本的名字,即使在脚本内的函数,它的值也是不变的。
用命令declear  -F 可以查看在内存中的函数列表,delcare -f查看详细的函数细节。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/92532/showart_1897548.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP