首页 > 代码库 > linux学习之shell脚本 ------- shell函数

linux学习之shell脚本 ------- shell函数

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020]

  今天来看一下Shell的函数。

Shell函数

  函数定义

   shell允许将一组命令集或语句形成一个可用块,这些块称为Shell函数。

   函数定义格式:

    函数名(){

    命令1

     ……

                 }

   或

    function 函数名(){

     ……

    }

   函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。

   如下面的脚本就是一个只包含函数的单独文件。

#!/bin/bash
#fun_test
function hello(){
   echo "Hello,today is `date`"
return 1
}

   既然定义的函数,那么如何调用该函数呢,下面,我们接着看函数调用。

  函数调用

   以上面定义的函数为例,调用方式如下:

#!/bin/bash
#fun_test
function hello(){
   echo "Hello,today is `date`"
return 1
}
echo "now going the function hello"
hello
echo "back from the function"
   可以看出,其实和其他语言一样,在主程序中直接用函数名,就可以调用定义好的函数了,我们看下,该脚本的执行结果:

jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ chmod a+rx fun_test.sh 
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./fun_test.sh 
now going the function hello
Hello,today is 2015年 02月 01日 星期日 20:22:36 CST
back from the function

  参数传递

   向函数传递参数就像是在脚本中使用位置变量一样,$1,...,$9

   我们修改上面的例子:

#!/bin/bash
#fun_test
function hello(){
   echo "Hello,$1 today is `date`"
return 1
}
echo "now going the function hello"
hello jesson
echo "back from the function"
   这里,是以位置变量使用参数,执行如下:

jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./fun_test.sh 
now going the function hello
Hello,jesson today is 2015年 02月 01日 星期日 20:28:38 CST
back from the function

  函数文件

   在上面函数定义里也提到了,函数可以单独作为一个文件,那这个文件即称为函数文件,那么就有一个问题了,上面的例子,都是在同一个文件内,也就是函数与函数的调用都在同一个主程序中,那么对于函数文件,该如何调用呢。

   还是一样,我们以例子来说明,先定义一个函数文件,修改上个脚本为函数文件,如下

fun_test.sh

#!/bin/bash
#fun_test
function hello(){
   echo "Hello,$1 today is `date`"
return 1
}
   这里,我们定义了函数文件,我们现在要在另一个脚本里调用该函数文件,该如何做呢????

funfilecall.sh

 #!/bin/bash
#funfilecall
#Source function
. fun_test.sh
echo "now going to the function hello"
hello jesson
echo "back from the function"
   可以看出,对于函数文件的调用,只需要两步就可实现,第一步就是在调用函数前,先申明函数文件,方法( . 函数文件名),这里要注意,.与函数文件名之间要有空格。接下下,就可以直接调用函数文件里定义的函数了,与之前在同一个文件中调用函数一样。该脚本执行结果如下:

jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./funfilecall.sh 
now going to the function hello
Hello,jesson today is 2015年 02月 01日 星期日 20:37:55 CST
back from the function

  检查载入函数和删除函数

   查看载入函数:

     set

   删除函数

    unset

   我们修改上面的脚本如下:

#!/bin/bash
#funfilecall
#Source function
. fun_test.sh
set
unset hello
echo "now going to the function hello"
hello jesson
echo "back from the function"
   执行结果如下:


......
now going to the function hello
./funfilecall.sh: 行 8: hello: 未找到命令
back from the function
   可以,在脚本中有unset hello,这句的意思是将hello删除,也就是不载入,所以执行结果中才会提示,hello:未找到命令。

   另外,$?可以取得一个命令的返回值,一般情况,当命令执行成功时,返回0,执行不成功时返回非0整数。对于函数也类似,可以通过$?取得函数的返回值。

linux学习之shell脚本 ------- shell函数