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" } ...
随机推荐
- 在excel中,截取电话号码后4位
在单元格中输入以下 =RIGHT($A3,4) 其中$a3是手机号所在的单元格,4是从右查4个
- Java空指针异常:java.lang.NullPointerException解决办法
问题描述:运行maven项目抛出NullPointerException 空指针异常. 报空指针异常的原因有以下几种: 1字符串变量未初始化 例如:String x=null:对象x为null, ...
- TP6自带的跨域中间件无法使用的个人解决方法
使用TP6,因为需要跨域上传图片,一直不成功,网上搜了好久,方法都没解决跨域上传文件 比如下面的方式没成功 $this->app = $app; $this->request = $thi ...
- php 的一些问题
------------------------------------------------------------------------------ * 绝对路径转化为相对路径 <?ph ...
- Anaconda和canda简介及区别
Anaconda简介: 1.是一个开源的Python发行版本,其包含了conda.Python等软件包,numpy,pandas(数据分析),scipy等科学计算包,而无需再单独下载配置. 可以在同一 ...
- 【C++ Primer Plus】编程练习答案——第11章 (待更新)
最近开学,事情较多,过两天更新...
- 数据库建表权限 CREATE command denied to user for table
今天在表中用Navicat连接服务器上的mysql账号进行建表,报了个这样类似的错, CREATE command denied to user for table 是数据库权限设置的问题,所以无法进 ...
- 11.4.2 LVS—NAT
Virtual Server via NAT(VS-NAT) 用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,, ...
- Spring IOC Container原理解析
Spring Framework 之 IOC IOC.DI基础概念 关于IOC和DI大家都不陌生,我们直接上martin fowler的原文,里面已经有DI的例子和spring的使用示例 <In ...
- THUSC & 中考 & NOI 拉跨记
THUSC 的拉胯记 时代比较久远了,可能有些事情记不清楚了. Day -\(\infty\) 本来说只有我.llsw.wxk过了审核,后来wy.lyc也搞了个体验营名额,于是和高二的一起集训. Da ...