[本文是自己学习所做笔记,欢迎转载,但请注明出处: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"
......可以,在脚本中有unset hello,这句的意思是将hello删除,也就是不载入,所以执行结果中才会提示,hello:未找到命令。
now going to the function hello
./funfilecall.sh: 行 8: hello: 未找到命令
back from the function
另外,$?可以取得一个命令的返回值,一般情况,当命令执行成功时,返回0,执行不成功时返回非0整数。对于函数也类似,可以通过$?取得函数的返回值。