shell函数
参考:http://www.cnblogs.com/jiqing9006/p/3253232.html
参考:《shell脚本学习指南》 O'Reilly
shell中函数使用
像其他程序语言一样,函数是指一段单独额程序代码,用以执行一些定义完整的单项工作。在大型程序里,函数可以在程序的多个地方使用。
function func() {...}
或
func(){...}
函数在使用之前必须先定义。
在函数中,位置参数($1、$2、……,$#,$*, $@)都是函数的参数。父脚本的参数临时地被函数参数所掩盖(shadowed)或隐藏。$0依旧是父脚本的名称。当函数完成时,原来的命令行参数会恢复。
在shell函数中,return命令的功能与工作方式都与exit相同,但需要注意的是:在shell函数体里使用exit,会终止整个shell脚本。
因为return会返回一个退出值给调用者,所以可以在if与while里使用函数。举例来说,可使用shell的函数架构取代test所执行的两个字符串的比较:
#equal --- 比较两个字符串
equal() {
case "$1" in
"$2") return 0 ;;
esac
return 1
}
if equal "$a" "$b" ...
if ! equal "$a" "$b" ...
return未提供参数,则使用默认退出状态,也就是最后一个执行的命令的退出状态。如果这就是你要的,那么严谨的shell函数写法:
return $?
警告:有些shell允许在脚本里使用return,但如果用于函数体之外,则视为等同exit。这种用法并不建议,因为会出现可移植性的困扰。
函数(至少在posix shell里)没有提供局部变量(bash、ksh88以及zsh都提供局部变量功能,但语法不尽相同),因此所有的函数都与父脚本共享变量。即,你必须小心留意不要修改父脚本里不期望被修改的东西,如PATH。不过这也表示其他状态是共享的,例如当前目录与捕捉信号。
函数调用方法之一
#!/bin/bash # testing the script function myfun { read -p "Enter a value:" value echo $[ $value * 2 ] } result=`myfun` echo "The new vlue is $result"
函数调用有两种方式(即命令代换方法):`fun`(反引号) 或 $(fun),推荐$(fun)。
若有参数可直接放在函数名后,`fun param1 param2`或$(fun param1 param2)
一般直接调用函数即可:函数名 参数1 参数2
需要函数返回值时才需要命令代换。
参考:
http://www.cnblogs.com/jiqing9006/p/3253232.html