关于shell函数的总结
先看一个例子,之后根据例子讲解。
#! /bin/bash # two param function add(){ if [ ! $# -eq 2 ] then echo "Usage: $0 paraA paraB" exit 1 fi let "a=$1" let "b=$2" let c=$a+$b #return $c #return can't work echo $c } # no param funtion println(){ echo "xxxxxx" } # no param function invoke println println # has param function invoke mmm=`add 2 7` echo "mmm=$mmm" exit 0
1.函数的写法:
methodName(){
....
}
注意:小括号内不写参数,即使这个函数需要参数;
不像C语言那样,参数写进小括号()里;
看例子:
add()
并不能 写成:
add(a, b)
2.函数的参数
函数的参数如同普通的shell脚本一样,是根据位置参数$1, $2, ... $x 传入得到的
看例子:略。
3.函数返回值,利用echo返回
注意:用echo返回而不是用return返回
4. 函数的调用
无参数函数调用:直接写名字,不需要反引号(` )
有参数函数调用: ` functionName paramA paramB ... paramX ` (反引号内写函数名和参数,空格隔开)
注意:别写成C的形式,如 add(2, 7)
小结:
函数跟普通的shell脚本,形式上是一样的。
如果需要,完全可以把函数单独拆成一个脚本,以便重用。
附:
如果觉得不懂,再看看此博文 。
更新于2010-11-30
写的一个shell递归,权当练习。
经验:子进程的值,父进程是看不见的
#! /bin/bash fs(){ totalSize=0 dirName=$1 # ls $dirName | cat | #while read line for line in `ls $dirName | cat` do fileName="$dirName/$line" if [ -d $fileName ] then size=`fs $fileName` else set - `ls -l $fileName` size=$5 fi let totalSize=$totalSize+$size done echo $totalSize } directoryName=$1 total=`fs $directoryName` echo "total=$total"