linux shell 函数返回值问题(超过255)

最近再写一个shell测试的时候出现问题,函数返回值异常

用shell计算斐波那契数列数列,写了一个shell函数,然后调用的,验证的时候我只随便计算了几个数(10以内),确认结果是正确的就提交了,后来同事找我说我的计算结果不对,拉着我现场验证(计算到45),一看结果果然后面的就不对了。

后来回去看脚本,发现有个坑,shell的返回值只能是0-255之间,超出的就会从0开始计算。

源代码如下

# 2019/04/15

fileCount=45
fileName=0001.bin
fileSize=1

# fibonacci
#
#        | 0,                   n = 0              
# f(n) = | 1,                   n = 1
#        | f(n-1) + f(n-2),     n >= 2
#
#
function FuncFibonacci()
{
    local tmp1=0
    local tmp2=1
    local tmp=1
    local i=2

    if [ $1 -lt 2 ]; then
        return $tmp
    fi

    # f(n) = f(n-1) + f(n-2)
    while [ $i -le $1 ]
    do
        tmp=$(($tmp1 + $tmp2))
        tmp1=$tmp2
        tmp2=$tmp
        let i++
    done  

    return $tmp
}

#start run
for i in $(seq 1 $fileCount)
do

    fileName=000$i.bin

            #get file size
            FuncFibonacci $i
            fileSize=$?
            
            #create and resize file
            dd if=/dev/zero of=$fileName bs=$fileSize count=1 &> /dev/null

done

shell函数不能返回超过255,那就只能用全局变量报错了

 

改成如下就好了

# 2019/04/15

fileCount=45
fileName=1.bin
fileSize=1

# fibonacci
#
#        | 0,                   n = 0              
# f(n) = | 1,                   n = 1
#        | f(n-1) + f(n-2),     n >= 2
#
#
function FuncFibonacci()
{
    local tmp1=0
    local tmp2=1
    local tmp=1
    local i=2

    if [ $1 -lt 2 ]; then
        return $tmp
    fi

    # f(n) = f(n-1) + f(n-2)
    while [ $i -le $1 ]
    do
        tmp=$(($tmp1 + $tmp2))
        tmp1=$tmp2
        tmp2=$tmp
        let i++
    done  

    fileSize=$tmp
}


#start run
for i in $(seq 1 $fileCount)
do

    fileName=$i.bin

    #get file size
    FuncFibonacci $i
             
    #create and resize file
    dd if=/dev/zero of=$fileName bs=$fileSize count=1 &> /dev/null       

done

 

posted @ 2019-04-19 11:13  mcdull^0^  阅读(2156)  评论(0编辑  收藏  举报