linux shell 函数返回值问题(超过255)

时间:2023-03-09 07:11:21
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