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" } ...
随机推荐
- 将dict.define转化成dict.txt
在使用捷通智能灵云外呼系统V6.1时.需要大量使用到模式码,也就是正则表达式.而老版本365还是使用场景文件. 当要将老版本改编成新版本的时候,需要需要将dict.define文件中的一行行的词条用& ...
- 【redis前传】集思广益之quicklist,取其精华去其糟粕
前言 在之前我们已经学习了redis五大数据结构中的list结构.其内部是linkedList和zipList两种结构.这是我们已经学习的内容.之前我没有结合操作具体查看.事实上在两者中还存在一种结合 ...
- PHP的LZF压缩扩展工具
这次为大家带来的是另外一个 PHP 的压缩扩展,当然也是非常冷门的一种压缩格式,所以使用的人会比较少,而且在 PHP 中提供的相关的函数也只是对字符串的编码与解码,并没有针对文件的操作.因此,就像 B ...
- mysql8 navicat远程链接失败
原因:mysql 8加密规则问题 更改加密规则: ALTER USER 'ycc'@'%' IDENTIFIED BY 'you password' PASSWORD EXPIRE NEVER; 修改 ...
- fliebeat配置手册
1. 关于Filebeat 当你要面对成百上千.甚至成千上万的服务器.虚拟机和容器生成的日志时,请告别 SSH 吧!Filebeat 将为你提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情 ...
- iSCSI 服务器搭建
一.简介 SCSI(Small Computer System Interface),小型计算机系统接口,是一种用于计算机及其周边设备之间(硬盘.软驱.光驱.打印机.扫描仪等)系统级接口的独立处理器标 ...
- P5825-排列计数【EGF,NTT】
正题 题目链接:https://www.luogu.com.cn/problem/P5825 题目大意 对于每个\(k\),求有多少个长度为\(n\)的排列有\(k\)个位置上升. \(1\leq n ...
- 从源码分析node-gyp指定node库文件下载地址
当我们安装node的C/C++原生模块时,涉及到使用node-gyp对C/C++原生模块的编译工作(configure.build).这个过程,需要nodejs的头文件以及静态库参与(后续称库文件)对 ...
- 运用shapefile.js解析Shp文件
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- ThreadLocalRandom类原理分析
1.Random类及其局限性 public int nextInt(int bound) { if (bound <= 0) throw new IllegalArgumentException ...