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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM