zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Html中,id、name、class、type的区别
    Windows10右键添加“在此处打开命令窗口”
    yarn的安装与使用及与npm对应的命令
    TodoMVC:帮助你选择一个MV*框架
    迅速上手:使用taro构建微信小程序基础教程
    编程之性能优化知多少
    CQRS
    事件驱动之异步事件
    事件驱动下
    事件驱动上
  • 原文地址:https://www.cnblogs.com/tid-think/p/10734740.html
Copyright © 2011-2022 走看看