Shell函数返回值

Shell脚本攻略--函数应用(返回值、传参、变量的作用范围、递归) 文章目录前言一、格式二、函数返回值1.示例①2.示例②三、函数传参四、函数变量的作用范围五、递归1.阶乘2.递归目录 前言 Shell函数也是我们经常使用的,因为有些命令序列是需要反复调用执行的,若每次使用同一命令就重复写一遍,就会导致代码量很大,行数特别多,为解决该问题可以将命令序列按格式写一起,以便可以重复使用,所以说,Shell函数的本质就是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可 一、格式 [function]是可选的,表示该函数的功能,这个是可以省 阅读详情
shell函数返回值一般有3种方式:

return语句

shell函数的返回值可以和其他语言的返回值一样,通过return语句返回。

比如:

#!/bin/bash -

function mytest()

{

echo "mytest function"

echo "argv[1] = $1"

if [ $1 = "1" ] ;then

return 1

else

return 0

fi

}

echo "mytest 1"

mytest 1

echo $?

echo "mytest 0"

mytest 0

echo $?

if mytest 1 ; then

echo "mytest 1"

fi

if mytest 0 ;then

echo "mytest 0"

fi

echo "end"

先定义了一个函数,mytest,它根据输入的参数是否为1来return 1或者return 0.

获取函数的返回值通过调用函数,或者最后执行的值获得。

另外,可以直接用函数的返回值用作if的判断。

注意:return只能用来返回整数值,且和c的区别是返回为正确,其他的值为错误。



全局变量或者环境变量

这种就类似于c中的全局变量。
#!/bin/bash -

g_var=

function mytest2()

{

echo "mytest2"

echo "args $1"

g_var=$1

return 0

}

mytest2 1

echo "g_var=$g_var"

函数mytest2通过修改全局变量的值来返回结果。


以上两个方法失效的时候

以上介绍的这两种方法在一般情况下都是好使的,但也有例外。

比如:

#!/bin/bash -

function mytest3()

{

grep "123" test.txt | awk -F: '{print $2}' | while read line ;do

echo "$line"

if [ $line = "yxb" ]

then

return 0

fi

done

echo "mytest3 here "

return 1

}

g_var=

function mytest4()

{

grep "123" test.txt | awk -F: '{print $2}' | while read line ;do

echo "$line"

if [ $line = "yxb" ]

then

g_var=0

echo "g_var=0"

return 0

fi

done

echo "mytest4 here "

return 1

}

mytest3

echo $?

mytest4

echo "g_var=$g_var"

test.txt中的内容如下:

456:kkk

123:yxb

123:test

输出如下:

yxb@yxb-laptop:~/文档/个人文档/shell函数返回值$ ./no_function.sh

yxb

mytest3 here

1

yxb

g_var=0

mytest4 here

g_var=

可以看到mytest3在return了以后其实没有直接返回,而是执行了循环体后的语句,同时看到mytest4中也是一样,同时,在mytest4中,对全局变量的修改也无济于事,全局变量的值根本就没有改变。

这个是什么原因那?

笔者认为,之所以return语句没有直接返回,是因为return语句是在管道中执行的,管道其实是另一个子进程,而return只是从子进程中返回而已,只是while语句结束了。而函数体之后的语句会继续执行。

同理,全局变量在子进程中进行了修改,但是子进程的修改没有办法反应到父进程中,全局变量只是作为一个环境变量传入子进程,子进程修改自己的环境变量,不会影响到父进程。

因此在写shell函数的时候,用到管道的时候一定要清除,此刻是从什么地方返回。


Echo返回值


其实在shell中,函数的返回值有一个非常安全的返回方式,即通过输出到标准输出返回。因为子进程会继承父进程的标准输出,因此,子进程的输出也就直接反应到父进程。因此不存在上面提到的由于管道导致返回值失效的情况。

在外边只需要获取函数的返回值即可。
#!/bin/bash -

function mytest5()

{

grep "123" test.txt | awk -F: '{print $2}' | while read line ;do

if [ $line = "yxb" ]

then

echo "0"

return 0

fi

done

return 1

}

result=$(mytest5)

if [ -z $result ]

then

echo "no yxb. result is empyt"

else

echo "have yxb, result is $result"

fi

输出如下:

have yxb, result is 0

这个方式虽然好使,但是有一点一定要注意,不能向标准输出一些不是结果的东西,比如调试信息,这些信息可以重定向到一个文件中解决,特别要注意的是,用到比如grep这样的命令的时候,一定要记得1>/dev/null 2>&1来避免这些命令的输出。

原文地址:http://my.oschina.net/biner/blog/28354

获取shell返回值 shell获取返回值的方法有多种,这里介绍两种:第一种是直接执行command然后获取返回值;第二种是包装成function并获取返回值。这种比较简单,也是使用最多的。 shell默认执行正确返回0,echo这句话不会失败,所以结果是0.这种方法写法也不复杂,只有一个地方需要注意就是返回值如果是integer的类型最大不能超过256 这个地方如果你把return改成300,实际返回的是44,也就是300-256.写法很简单,之前也遇到过坑,就是shell返回值最大256,不要用它来计算加减法返回。... 阅读详情

相关推荐

Linux Shell函数返回值 编程

在Shell脚本中,可以使用function关键字或者直接使用函数名来定义一个函数。# 函数体# 可以包含一系列的命令和操作以下是一个简单的示例,定义了一个名为welcomeecho "欢迎使用Shell编程!

TechGlide的博客 187

shell函数及返回值

本文介绍了shell函数及返回值

phmatthaus的专栏 7289

SDR实战(四)-AD9361使用手册(三)

本节定义了并行数据端口和串行外设接口(SPI),它们使得AD9361与基带处理器(BBP)之间能够传输数据和控制/状态信息。图63展示了这些接口,并提供了AD9361和BBP在宽带无线系统中使用方式的高级概述。数据接口以两种模式之一运行:兼容标准CMOS模式或兼容低压差分信号(LVDS)模式。每个接口都具有以下部分描述的独特特性。使用CMOS模式时:保持了单端-CMOS逻辑兼容性。可以使用一个或两个数据端口。使用两个端口可以提高数据吞吐量。

hutx0924的博客 6242

Shell入门教程:Shell函数的返回值

shell函数返回值一般有3种方式: 1、return语句(默认的返回值) shell函数的返回值可以和其他语言的返回值一样,通过return语句返回。 比如: #!/bin/bash function mytest() { echo "mytest function" echo "argv[1] = $1" if [ $1 = "1" ] ;then ret...

weixin_34138377的博客 598

宏基因组功能注释实战:从CAZyme到VFDB的完整流程(含数据库下载与脚本优化)

本文详细介绍了宏基因组功能注释的完整流程,涵盖CAZyme、eggNOG、CARD和VFDB四大核心数据库的实战应用。从环境配置、数据库下载与预处理到注释流程执行与优化,提供了全面的操作指南和脚本优化建议,帮助研究人员高效完成宏基因组数据分析。特别针对CAZyme注释等关键步骤给出了参数优化方案和常见问题排查方法。

weixin_29289821的博客 294

DOA估计算法从原理到仿真——CBF、Capon、MUSIC算法

从原理出发理解并实现经典的DOA估计算法

m0_55845774的博客 1万+

shell 函数返回值的方法

shell 函数返回值的方法从shell函数中返回的数值的方法不多,有本书书里说只有写入文件或者全局变量。(The only way to return a value to the calling program is to write it to a file (or standardoutput) and have the calling program read (or assig

阿伦的专栏 2万+

KylinOS 离线安装 MinIO【图文步骤】

在国产操作系统 KylinOS 中安装 MinIO,详细步骤...

甘蓝的专栏 1534

浅谈获取shell中函数的返回值

首先看看怎么获取命令的返回值, 根据linux标准,返回0就是正确,非0就是错误的原则,只要命令执行正确,返回的一般都是0,那么怎么获取命令的返回值??用位置参数 $? $? 获取上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误) ls -l a=$? lss b=$? echo $a $b最后得到 a是0,b是127,至于为什么是127,这个我还不晓

繁华落尽梦一场 6439

Open3D DBSCAN聚类

DBSCAN算法做为一种有名的密度聚类算法,它是通过邻域参数(Distance,MinPts)来刻画样本分布的紧密程度。而在真正开始之前,首先要理解下面这几个概念:更为具体的内容也可参考这篇文章点云DBSCAN聚类算法。...

dayuhaitang1的博客 1794

量子化学仿真软件:VASP_(9).磁性材料计算

在量子化学仿真软件 VASP 中,磁性材料的计算是一个复杂但重要的过程。通过正确设置磁性状态、分析磁性性质、优化计算参数以及研究磁性相变和磁动力学,可以更准确地描述和预测磁性材料的性能。希望本节的内容能够为研究磁性材料的科研人员提供有用的参考和指导。

kkchenjj的博客 1374

Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)

分享知识 传递快乐 1、函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。Shell 函数定义的语法格式如下: [function] funname [()]{ 函数体 [return int;] } 格式1: 简化写法,不写 function 关键字: 函数名(){ 函数体 } 格式2: 这是标准写法,也推荐...

旷野历程 3万+

matlab 显示曲面网格【2025最新版】

matlab点云工具箱对点云三维重建结果显示的函数。博客长期更新,本文最近更新时间为:2025年9月14日。

点云侠的博客 2580

shell 获取函数返回值

在shell脚本中要获取一个函数的返回值,有两个方法: #! /bin/sh function test() { echo "test here" return 100 } DD=`test` #echo excute over echo "return: $?" echo "DD: $DD" return: 100 DD: test here 如果 把...

smartbigwang的博客 2512

AXI2APB_bridge 设计

此处研究AHB Slave到 APB master的桥接器,实现接口转化,例如下图之后是参数描述

Starry__的博客 4035

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

linux中if函数返回值,Linux Shell函数返回值

Shell函数返回值,一般有3种方式:return,argv,echo1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回。示例:#!/bin/bash-functionmytest(){echo"arg1=$1"if[$1="1"];thenreturn1elsereturn0fi}echoecho"mytest1"mytest1e...

weixin_39616798的博客 1371

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【shell】函数、传参、返回值

1.函数 shell语言的函数跟其他语言的函数区别不大,不过更多的是用来控制一堆指令一起执行,不注重返回值 定义 function 函数名(){ 函数体 } 举例 function myFun(){ echo "this is my function" } myFun 说明 function关键词可省略 函数体不能为空,否则报错 函数名后面的括号不能写形参 调用函数时不需要加括号(当做命令使用) 2.函数传参 shell函数的传参方式与其他语言不一样,不用形参,而是 $n functio

冰冷的希望的博客 2498

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

关于 Shell中函数的返回值 问题

shell 函数是否应该使用“return” 返回结果?

好记性不如烂笔头 2627

shell中判断函数返回值_Shell 脚本中的函数

通过之前发表的文章,相信大家对 Linux Shell 脚本的基本语法有了一定程度的了解,接下来几篇文章我将会介绍一些 Shell 脚本编程的一些高级语法,今天我们就从函数开始。提到函数,相信有过编程基础的小伙伴都会了解一些,函数其实是我们编码的逻辑单元,无论我们用的面向过程的语言,还是面向对象的语言,函数都是编程中基本的内容。好的函数接口设计,清晰的函数逻辑,巧妙的函数提取,都是对程序员最基本的...

weixin_27729671的博客 6419

shell函数内调用另一个函数(不带返回值和带返回值)

一、函数B调用不带返回值的函数A 新建文件,命名为test.sh,添加如下代码: #!/bin/bash # 即将被调用的函数A function A(){ a="aaa" echo $a } # 函数B,直接调用A function B(){ A echo "bbb" } B 命令行中通过sh test.sh执行结果: 二、函数B调用带返回值的函数A,并接收函数A的返回值进行输...

u014259820的博客 9009

如何在Shell 中正确的传递函数返回值

一个Shell 函数返回值引发的问题、该问题的Debug 过程以及结论。

河 的 第 三 条 岸 4265

shell函数定义、函数调用及函数返回值用法

1、函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。Shell 函数定义的语法格式如下: [function] funname [()]{ 函数体 [return int;] } 格式1: 简化写法,不写 function 关键字: 函数名(){ 函数体 } 格式2: 这是标准写法,也推荐大家使用的写法: function函数名(){ 命令序列 } 这样方便做到一看就懂。 格式3: 如果写了 funct...

tecoes的博客 1万+

Shell 函数返回值

转自:http://inter12.iteye.com/blog/1236399 Shell 函数返回值只能是整形数值,一般是用来表示函数执行成功与否的,0表示成功,其他值表示失败。因而用函数返回值来返回函数执行结果是不合适的。如果要硬生生地return某个计算结果,比如一个字符串,往往会得到错误提示:“numeric argument required”。 如果一定要让函数返回一个或多个

yasi_xi的专栏 1万+

shell脚本 之 函数返回值

转载地址:https://inter12.iteye.com/blog/1236399 shell 函数返回值 只允许返回数字,若不是则报 line 6: return: haha: numeric argument required 若是写了return ,则返回return 语句跟的数值,若是没有return语句则返回最后一个命令的执行结果。   用例子说话吧   1 #!/bin...

kunkliu的博客 3221

Shell 获取函数的返回值

背景:定义了一个函数,需要对比 map 中的值,获取 value 中最小值。Shell 和其他语言的函数返回值还是差别挺大的。 定义一个函数 functionname(){ 操作内容 echo 输出内容 return 返回值 #返回值可有可无 } 获取的函数的返回值 函数默认是将标准输出传递出来,不是返回值 所以如果直接调用 functionname ,实际上是将输...

chqj_163的专栏 625
上一篇: shell中的数学运算
下一篇: 图像识别四大图像库比较:OpenCV/FreeImage/CImg/CxImage
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值