最近再写一个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