在linux shell脚本中使用函数时,需要注意函数返回后,返回值的使用,不然很容易出问题。具体来说,shell脚本函数通过return返回后,返回值会保存在$?中。需要注意的是,$?会在函数返回后很快变回0值,所以应在函数返回后尽快将$?保存在变量中,然后后续通过该变量来访问返回值,而不是直接通过$?来进行后续处理。

如下代码,尽管D2确实是个目录,但是得到的结果始终会是$A是一个REG文件,这是因为函数testFile返回后做了些其他的事,在后续进行$?值判断时,它已变回了0.

#! /bin/bashtestFile()
{if [ -f $1 ]; thenreturn 0elsereturn 1fi
}for A in f1 D2dotestFile $ARET=somethingif [ $? = 0 ]; thenecho '$?' is $? echo $A is a REG fileelseecho '$?' is $?echo $A is not a REG filefi done

此时脚本执行结果为:

想要让程序按预期执行,需要在函数返回后,立即将返回值赋给变量,如下代码所示:

#! /bin/bashtestFile()
{if [ -f $1 ]; thenreturn 0elsereturn 1fi
}for A in f1 D2dotestFile $ARET=$?if [ $RET = 0 ]; thenecho '$?' is $? echo $A is a REG fileelseecho '$?' is $?echo $A is not a REG filefi done

执行结果为:

linux shell函数返回值问题相关推荐

  1. Linux Shell 函数返回值

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

  2. Linux Shell函数返回值

    2019独角兽企业重金招聘Python工程师标准>>> 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: [javas ...

  3. linux 变量函数返回值,linux shell 自定义函数(定义、返回值、变量作用域)介绍...

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

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

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

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

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

  6. 14.3 shell函数返回值

    3. shell函数返回值 3.1 获取上一个命令的退出状态$? 3.2 获取函数的返回值$? 3.3 函数的返回值接收调用方式 3.1 获取上一个命令的退出状态$? $? 是一个特殊变量,用来获取上 ...

  7. shell 函数返回值

    Shell函数返回值,常用的两种方式:return,echo. 1.return 语句 该返回方法有数值的大小限制,超过255,就会从0开始计算,所以如果返回超过255,就不能用这种方式,建议采用ec ...

  8. Linux system函数返回值

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

  9. Shell:函数返回值接收

    函数返回值接收处理 目录 函数返回值接收处理 第一种方式:echo ${var} 第二种方式:return ${var} 第一种方式:echo ${var} 在函数fun()内部使用echo + 结果 ...

最新文章

  1. Discuz常见大问题-如何DIY一个独立页面
  2. hs_err_pid
  3. 802.11e (Quality of Service) : EDCA
  4. linux boot空间分多少,/boot分区空间不足,清理老内核所占空间
  5. mysql inception web_基于Inception搭建MySQL SQL审核平台Yearing
  6. 服务器ip直接访问php怎么写,php - 如何实现用公网ip访问到服务器上的网页?
  7. Python生成exe可执行文件的两种方法(py2exe和pyinstaller)
  8. 什么是互联网保险平台?
  9. C语言删除字符数组中指定的字符(C笔记)
  10. 第三阶段应用层——1.7 数码相册—电子书(5)—多线程支持多输入
  11. HTML中对字体颜色稀色,稀的五行属什么,五行分别代表什么颜色
  12. 小红书怎么看关键词排名?如何提升笔记自然搜索排名
  13. 520到了! 我用Python拜托周董为我和女友送上祝福!
  14. 第13章 Python建模库介绍--Python for Data Analysis 2nd
  15. 布隆过滤器(Bloom Filter)
  16. RSD和wlwmanifest是什么
  17. 蚂蚁通讯框架SOFABolt之私有通讯协议设计
  18. 推荐个东西,GPGPU开发
  19. 离散数学笔记(一)数理逻辑
  20. 如何把单词批量导入金山词霸生词本?

热门文章

  1. dubbo优势_dubbo优点是什么?dubbo有哪些缺点?
  2. 2022-2028全球与中国油田预测性维护市场现状及未来发展趋势
  3. 关于ArcGIS安装出现错误2种解决问题的方式。
  4. 李佳琦直播连续翻车的原因大揭秘,网红背后推手MCN机构都在做什么?
  5. 马老师力荐:腾讯 SpringBoot 高阶笔记,限时开源
  6. 学习笔记 python取余
  7. WIN7系统|Oracle11g数据库|Python|Django|VUE各种环境配置
  8. UGUI 刷新rectTransform
  9. Flask学习之旅——1.2项目配置
  10. 微机原理与接口技术计时十字路口交通信号灯及公共时钟