linux shell 函數返回值問題(超過255)
阿新 • • 發佈:2019-04-19
找我 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 resizefile 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)