首页 > linux > bash shell函数的定义及变量的简单说明
2009五月10

bash shell函数的定义及变量的简单说明

函数:

“函数是一种脚本内脚本”,程序员很难想像没有函数的日子,至少我会比较痛恨。

所以了解函数的定义也就是学习bash的一大要点了。

函数大大增强了shell的编程能力,主要原因有如下两点:

  1. 当你调用一个函数时,它已经在shell的内存中;因此函数运行的很快。
  2. 将较长的shell脚本组织成各种容易开发和维护的模块是理想的。


呃,针对第一点,现在计算机的内存那是相当的便宜,大家不用再担心钱了吧?

来个4G的条子,当然用XP你就用3.5G吧,除非你扩展一下。。

定义一个函数,就是令shell在内存中保存其名字和定义(也就是其包含的shell命令)。如果你要在以后运行函数,只须鍵入其名字,后跟任意参数即可,就好像它是一个shell脚本

要定义一个函数有两种格式

function functname
{
      shell commands
}

functname()
{
     shell commands
}

这俩方法,其实是一样的,没啥本质及功能上的区别。

使用unset -f functname删除一个函数定义。

unset -f functname

可以使用如下命令来查找到登录会话里定义的函数

declare -f

嘿嘿,咋样?是不是显示的内容太长?嗯。用管道命令more来输出吧

declare -f|more

如果只想看函数名的话就用

declare -F

除了优势,函数和脚本有两个重要差别

  1. 当通过名字调用时,函数不在单独进程里运行,而脚本却可以。运行一个函数的语义更类似于登录时.bash_profile中的命令或用source命令调用脚本时的情况。
  2. 如果一个函数与一个脚本或可执行程序(也有可能是脚本啊)有相同的名字,则函数优先。

看出来了吧?“函数优先”,为啥呢?这里说一下在shell中鍵入一个命令时,各种资源的优先级次序:

  1. 别名
  2. 关鍵字,例如function,以及if和for等
  3. 函数
  4. 内置命令,如cd和type等
  5. 脚本和可执行程序(在最后哦),shell按在PATH环境变量中列出的目录中对其进行搜索

不过,呃,这个顺序是可以改变的哈。可以使用内置的command builtin和enable改变优先级次序。

它允许你将函数、别名和脚本文件定义为同样的名字,并选择要执行的一个。

变量:
呼,终于说到变量了。。嗯。没事这个短。。

简单地说:变量被命名用以存储数据,通常格式为字符串,其值可使用$符号加名字获得。某些变量称为环境变量,按惯例以大写字母命名,其取值对子进行已知(使用export语句)

呵,就这些。嘿嘿。。因为后面的内容不能放在这一节里了。太长了,呼呼。。

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/05/10/394/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

6 Responses to “bash shell函数的定义及变量的简单说明”

  1. #1 boxsea 回复 | 引用 Post:2009-05-10 19:50

    继续来这里做个沙发,想做个友情连接可以吗

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2009-05-10 23:50

    @boxsea
    呵。当然可以啊。。我先加上你的。

    [回复]

  3. #3 boxsea 回复 | 引用 Post:2009-05-11 12:16

    我的也做好了,欢迎常来

    [回复]

  4. #4 simaopig 回复 | 引用 Post:2009-05-11 12:23

    @boxsea
    呵。一定常去打扰。呵。

    [回复]

  5. #5 Brhum 回复 | 引用 Post:2009-05-12 02:41

    写一些编码问题更好~这些大家没心思~学的人都在看砖头~

    [回复]

  6. #6 simaopig 回复 | 引用 Post:2009-05-17 16:33

    @Brhum
    呃,我才看到你的留言。SORRY,SORRY。
    我也不知道该写啥。嗯。想想,想想。。

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)