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