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
linux shell 函数返回值问题(超过255)的更多相关文章
- Linux Shell函数返回值
转:http://blog.csdn.net/ithomer/article/details/7954577 Shell函数返回值,一般有3种方式:return,argv,echo 1) return ...
- Linux Shell 函数返回值
Shell函数返回值,常用的两种方式:return,echo 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fu ...
- Shell函数:Shell函数返回值、删除函数、在终端调用函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...
- Shell函数返回值、删除函数、在终端调用函数
Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () { list of commands [ return value ] ...
- 【Shell脚本学习22】Shell 函数:Shell函数返回值、删除函数、在终端调用函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...
- Linux system函数返回值
例: status = system("./test.sh"); 1.先统一两个说法: (1)system返回值:指调用system函数后的返回值,比如上例中status为syst ...
- shell函数返回值
1.用return作为函数的退出状态,然后通过echo $?来得到函数返回值,注意,return返回的值限定为0-255. 例子: #! /bin/bash sum() { let "z=$ ...
- linux recv函数返回值分析
函数原型: ssize_t recv(int sockfd, void *buf, size_t len, int flags); 该函数第一个参数制定接收端套接字描述符; 第二个参数指明一个缓冲区, ...
- shell 函数返回值与字典
shell的函数只能返回整数值,如果想让函数返回字符串可以在函数调用处为变量赋值. # 定义函数function test() { name=$1 echo "123213" } ...
随机推荐
- [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练
[源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 目录 [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 0x00 摘要 0 ...
- 异步servlet的原理探究
异步servlet是servlet3.0开始支持的,对于单次访问来讲,同步的servlet相比异步的servlet在响应时长上并不会带来变化(这也是常见的误区之一),但对于高并发的服务而言异步serv ...
- 【PHP数据结构】散列表查找
上篇文章的查找是不是有意犹未尽的感觉呢?因为我们是真真正正地接触到了时间复杂度的优化.从线性查找的 O(n) 直接优化到了折半查找的 O(logN) ,绝对是一个质的飞跃.但是,我们的折半查找最核心的 ...
- AVS 端能力之蓝牙模块
该类为蓝牙端能力处理类,主要负责蓝牙设备配对和蓝牙音频播放功能. 功能简介 实现蓝牙设备的启动发现模式.扫描蓝牙设备.建立蓝牙连接功能 实现蓝牙设备音频播放.停止.上一首.下一首功能 其它细节参考&l ...
- 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大 | 百篇博客分析OpenHarmony源码 | v3.05
百篇博客系列篇.本篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...
- CF835E-The penguin‘s game【交互】
正题 题目链接:https://www.luogu.com.cn/problem/CF835E 题目大意 长度为\(n\)的序列中有两个\(y\)其他都是\(x\),给出\(n,x,y\).你每次可以 ...
- AT2164-[AGC006C]Rabbit Exercise【差分,倍增,数学期望】
正题 题目链接:https://www.luogu.com.cn/problem/AT2164 题目大意 \(n\)只兔子编号为\(1\sim n\),第\(i\)只在坐标轴\(x_i\)处.然后\( ...
- Javascript设计模式之原型模式、发布订阅模式
原型模式 原型模式用于在创建对象时,通过共享某个对象原型的属性和方法,从而达到提高性能.降低内存占用.代码复用的效果. 示例一 function Person(name) { this.name = ...
- [RabbitMQ]AMQP 0-9-1:模型
上一篇文章(RabbitMQ:下载 & 安装)中,我们下载并且安装了RabbitMQ,并且成功注册了RabbitMQ服务.本文我们将学习RabbitMQ中最基础.最重要的概念:AMQP 0-9 ...
- Python笔记_1语法总结
前言导读 本章知识点是我在最初期听python视频教程的时候整理总结的笔记 对python语法的认识对以后代码的解读有着很大的帮助. 1 新建python命名规则 新建项目名 :数字编号 项目名称 新 ...