Who am I

我的照片
Hefei, Anhui, China
Research Fields: Satellite Geodesy

2012年2月10日星期五

shell函数


shell函数的定义(两种方式):
function funcname{
          body
}
function funcname(){
body
}
其中,关键字function可以省略。两者的区别在于第二种加了()。通常使用第二种形式,类似于C语言风格。

shell函数的调用
shell语言不同于其它编程语言,shell语言不会进行预编译。因此,函数在使用之前必须进行预定义。函数的定义可以写在当前的shell脚本中,也可以写在单独的一个文件中。写在当前的shell文件中,在调用函数之前必须先写函数体。例:
#! /bin/bash
hello(){
echo “hello there today’s data is `date`”
}
hello          #调用函数hello
第二种方式是将函数体单独写在一个文件中,在shell脚本中包含这个函数即可。
shell使用source命令引用其它文件,类似于C语言的includesource命令等同于.命令。
source file_name     这样可以把函数定义在一个文件中,在另外一个文件中调用这个函数。
例:将函数hello写在文件hellofunc文件里。在一个新的脚本文件里调用这个函数
#! /bin/bash
. hellofunc        #(或者可以写成source hellofunc),调用hello函数
hello         #运行hello函数

参数传递
当一个函数被调用时,脚本程序的位置参数$*,$@,$#,$1,$2等会被替换为函数的参数。当函数执行完毕后,这些参数会恢复它们先前的值。
shell脚本与函数间的参数传递可利用(1)位置参数(2)变量直接传递。变量的值可以由shell脚本传递给被调用的函数。如下例所示
#! /bin/bash
func() {
echo $a $b $c
echo $1 $2 $3
}
a=”working directory”
b=”is”
c=`pwd`
func Welcome you baby
显示结果为:
working directory is /home/wuhu
Welcome you baby

函数返回
如果在函数里没有使用return命令指定一个返回值,函数返回的就是执行的最后一条命令的退出码。因此,可以通过return命令让函数返回数字值;让函数返回字符串值的常用方法是让字符串保存在一个变量中,而该变量应该可以在函数结束之后被使用。
例:
#! /bin/bash
function hello(){
          echo “Hello!”
}
hello          #调用函数
echo $?     #查看函数执行状态,0代表成功执行,1代表错误。

函数的载入和删除
set命令查看已载入的函数
unset funcname取消载入
例:
#! /bin/bash
. hellofunc
unset        #取消载入
        hello        #因为已经取消载入,所以调用会出错

没有评论:

发表评论