1. 程式人生 > >linux shell 函數返回值問題(超過255)

linux shell 函數返回值問題(超過255)

找我 turn 返回 cci pre 列數 數列 cti then

最近再寫一個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

linux shell 函數返回值問題(超過255)