最近再写一个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)的更多相关文章

  1. Linux Shell函数返回值

    转:http://blog.csdn.net/ithomer/article/details/7954577 Shell函数返回值,一般有3种方式:return,argv,echo 1) return ...

  2. Linux Shell 函数返回值

    Shell函数返回值,常用的两种方式:return,echo 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fu ...

  3. Shell函数:Shell函数返回值、删除函数、在终端调用函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...

  4. Shell函数返回值、删除函数、在终端调用函数

    Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () { list of commands [ return value ] ...

  5. 【Shell脚本学习22】Shell 函数:Shell函数返回值、删除函数、在终端调用函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...

  6. Linux system函数返回值

    例: status = system("./test.sh"); 1.先统一两个说法: (1)system返回值:指调用system函数后的返回值,比如上例中status为syst ...

  7. shell函数返回值

    1.用return作为函数的退出状态,然后通过echo $?来得到函数返回值,注意,return返回的值限定为0-255. 例子: #! /bin/bash sum() { let "z=$ ...

  8. linux recv函数返回值分析

    函数原型: ssize_t recv(int sockfd, void *buf, size_t len, int flags); 该函数第一个参数制定接收端套接字描述符; 第二个参数指明一个缓冲区, ...

  9. shell 函数返回值与字典

    shell的函数只能返回整数值,如果想让函数返回字符串可以在函数调用处为变量赋值. # 定义函数function test() { name=$1 echo "123213" } ...

随机推荐

  1. HTML基本概念及基本标签

    HTML基本概念及基本语法 1.HTML的基本概念 1.1  B/S.C/S基本概念 B/S(Browser/Server):指的是浏览器端与服务器端工作模式,优点相对节省本地存储空间,不足是需要占用 ...

  2. Nginx TP5环境配置

    Apache默认支持Pathinfo模式  Nginx不支持  需要手动配置  Apache默认支持Pathinfo模式  Nginx不支持  需要手动配置 server { #配置监听端口 list ...

  3. Linux系列(31) - rpm命令管理之升级与卸载命令(3)

    升级命令 rpm -Uvh 包全名(要升级到的软件版本),如果没有安装这个软件的任何版本,这个命令可以代替rpm -ivh. rpm -Uvh 包全名 选项: - -U(upgrade):升级 卸载命 ...

  4. 关于连接服务器redis的教程

    第一步:下载RedisDesktopManager 这个百度一搜就有了,但是现在的版本ssh用不了 建议找可以用的版本,这个百度,懂得都懂. 第二步:服务器宝塔redis设置 在配置文件将bind 1 ...

  5. php 常用算法与函数

    1.一群猴子排成一圈,按1,2,-,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫 ...

  6. self this

    面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意 ...

  7. 用 openresty 编写 lua

    """ #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/erro ...

  8. P6122-[NEERC2016]Mole Tunnels【模拟费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P6122 题目大意 给出\(n\)个点的一棵满二叉树,每个点有容量\(c_i\),\(m\)次从\(p_i\)处加一 ...

  9. 从0到1告诉你搭建完整Python+requests接口自动化测试框架!

    前言 很多小伙伴不知道什么是框架?框架有哪些东西? 一步步从需求分析到报告生成告诉你如何搭自动化建框架. 学完unittest后这里基本上可以搭建一个简易的项目框架了,我们可以用一条run_main. ...

  10. WPF进阶技巧和实战03-控件(2-特殊容器)

    ScrollViewer控件 直接继承ContextControl类,提供了虚拟界面,允许用户围绕更大的元素滚动.只能包含单个元素(ContextControl决定),但可以放置布局控件来实现多个任意 ...