文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>shell-func

shell-func

时间:2009-04-11  来源:paramita555

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查看详细的函数细节。

相关阅读 更多 +
排行榜 更多 +
剑术大乱斗

剑术大乱斗

动作格斗 下载
南钛HSSE

南钛HSSE

商务办公 下载
柱子

柱子

动作格斗 下载