linux_shell编程总结(二)函数

关于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"

猜你喜欢

转载自fantaxy025025.iteye.com/blog/814221