Chinaunix首页 | 论坛 | 博客
  • 博客访问: 261686
  • 博文数量: 93
  • 博客积分: 3001
  • 博客等级: 中校
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-11 13:20
文章分类

全部博文(93)

文章存档

2011年(1)

2009年(92)

我的朋友

分类: LINUX

2009-07-11 18:01:30

13.16.1  定义函数

有两种格式可以声明一个bash函数。一种是旧的Bourne shell方式,函数名后面跟有一对空的圆括号,再跟函数定义。新的格式(Korn shell方式)是用function关键字后跟函数名以及函数定义。如果使用新方法,圆括号是可选的。函数的定义由花括号中的一组命令构成,命令之间以分号分隔。最后那条命令必须以分号终结。花括号两侧的空格是必需的。传递给函数的任何参数被当作函数内的位置参量。一个函数的位置参量对函数来说是局部的。内置函数local允许在函数定义中创建局部变量。函数还可以递归,可以无限次调用它本身。

格式

function_name () { commands ; commands; }

function function_name { commands ; commands; }

function function_name () { commands ; commands; }

范例13-81

1   $ function greet { echo "Hello $LOGNAME, today is $(date)"; }

2   $ greet

    Hello ellie, today is Wed Jul 14 14:56:31 PDT  2004

3   $ greet () { echo "Hello $LOGNAME, today is $(date)"; }

4   $ greet

    Hello ellie, today is Wed Jul 14 15:16:22 PDT  2004

5   $ declare -f

    declare -f greet()

    {

       echo "Hello $LOGNAME, today is $(date)"

    }

6   $ declare -F

    declare -f greet

7   $ export -f greet

8   $ bash                 # Start subshell

9   $ greet

    Hello ellie, today is Wed Jul 14 17:59:24 PDT  2004

说明

1. 关键字function后跟函数名greet。函数定义用花括号括起来。在左花括号后必须有一个空格。同一行的语句用分号来终结。

2. 当调用greet函数时,括在花括号中的命令在当前shell环境下执行。

3. Bourne shell格式再次定义greet函数,函数名后跟一对空的圆括号,然后是函数定义。

4. greet函数再次被调用。

5. -f开关的declare命令列出在该shell中定义的所有函数以及它们的定义。

6. -F开关的declare命令只列出函数名。

7. -f开关的export命令使函数成为全局的。即子shell也可以获得。

8. 启动一个新的bash shell

9. 在这个子shell中函数是定义的,因为它已经被导出。

范例13-82

1   $ function fun {

         echo "The current working directory is $PWD."

         echo "Here is a list of your files: "

         ls

         echo "Today is $(date +%A).";

   }

2   $ fun

    The current working directory is /home.

    Here is a list of your files:

    abc      abc123   file1.bak  none       nothing   tmp

    abc1     abc2     file2         nonsense  nowhere   touch

    abc122   file1    file2.bak   noone      one

    Today is Wednesday.

3   $ function welcome { echo "Hi $1 and $2"; }

4   $ welcome tom joe

    Hi tom and joe

5   $ set jane anna lizzy

6   $ echo $*

    jane anna lizzy

7   $ welcome johan joe

    hi johan and joe

8   $ echo  $1 $2

    johan joe

9  $ unset -f welcome     # unsets the function

说明

1. 命名并定义函数fun。关键字function后跟一个函数名和括在花括号内的一组命令。命令分列在单独的行。如果它们列在同一行里,就必须用分号来分隔。在第一个花括号后必须有一个空格,否则将出现语法错误。必须在一个函数使用前就定义它。

2. 当被调用时,函数的行为和脚本的相同。依次执行函数定义中的每条命令。

3. 有两个位置参量用于函数welcome。当参数传递给函数时,将给位置参量赋实际值。

4. 函数的参数tomjoe被分别赋给$1$2。一个函数里的位置参量是函数私有的,而且不会影响函数外的任何使用。

5. 在命令行设置位置参量。这些变量对在函数中设置的那些没有任何影响。

6. $*显示当前设置的位置参量值。

7. 调用函数welcome。赋给位置参量的值是johanjoe

8. 在命令行赋值的位置参量不受在函数中定义的那些参数的影响。

9. -f开关的unset内置命令将清除函数定义。

13.16.2  列出和清除函数

要列出函数和它们的定义,就要用declare命令。在bash 2.x及以上版本中,declare –F仅列出函数名。函数及其定义将和输出变量、局部变量一起显示在输出结果中。函数及其定义可以用unset -f命令来清除。

 

阅读(1184) | 评论(0) | 转发(0) |
0

上一篇:词表中的$和$@变量

下一篇:历史命令操作

给主人留下些什么吧!~~