• 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
  • 相关阅读:
    取出某块内存的二进制数据
    拷贝构造函数的第一个参数必须是自身类类型的引用
    大小端,memcpy和构造函数
    类型装换和内存数据显示
    ERROR: iterator not incrementable || iterator not decrementable
    什么时候删除指针后,要给指针赋NULL
    chapter11、4concurrent.future模块
    chapter11、3多进程 multiprocessing
    chapter8.3、二分查找
    chapter8.2、面向对象三要素--继承
  • 原文地址:https://www.cnblogs.com/tid-think/p/10734740.html
Copyright © 2020-2023  润新知