通过&&, || 理解shell中的函数返回值。

  我想实现如下功能:

  写一个函数判断一个字符串中是否只包含数字,并返回相应的标志(是/否);

  通过调用上面的函数,判断给定的字符串是否只包含数字,根据返回值做不同的处理。

  问题出现了,当只包含数字时我让函数返回1(想用1表示真),否则返回0.

  然后通过func && operation_yes || operation_no.结果就出现了判断情况正好相反的现象。

  原因就是我对shell函数的返回值按照C/C++,Python,Java...的方式理解了,而正确的理解是:

  Bash functions, unlike functions in most programming languages do not allow you to return a value to the

caller. When a bash function ends its return value is its status: zero for success, non-zero for failure.

通过下面的func2理解这种现象(下面的代码是能够正确判断的版本,正好判断相反的版本,就是对func2中return

0和1进行调换即可):

  1. #!/bin/bash
  2. #File: demo.sh
  3. #Author: lxw
  4. #Time: --
  5.  
  6. func1()
  7. {
  8. echo "-----------123a-----------------------"
  9. [ -z $(echo "123a"|sed 's/[0-9]//g') ] && echo "all digits" || echo "not all digits"
  10. }
  11.  
  12. func2()
  13. {
  14. echo "-----------123-----------------------"
  15. [ -z $(echo ""|sed 's/[0-9]//g') ] && return || return
  16. # return value: 0_yes 1_no
  17. }
  18.  
  19. func1
  20. echo "func1() returns" $?
  21.  
  22. func2
  23. #函数的返回值实际上就是函数的退出状态
  24. echo "func2() returns" $?
  25. func2 && echo "all digits" || echo "not all digits"

  所以当执行最后一条语句时,&&,||根据func2函数的执行状态,决定执行哪部分代码。

执行结果:

  1. -----------123a-----------------------
  2. not all digits
  3. func1() returns
  4. ----------------------------------
  5. func2() returns
  6. ----------------------------------
  7. all digits

func && operation_yes || operation_no (Shell)的更多相关文章

  1. shell 10流程控制

    if 判断 if #shell #!/bin/sh a=5 if [[ $a > 3 ]];then echo "$a>3" fi #写成一行 if [[ $a < ...

  2. UNIX shell 学习笔记 一 : 几个shell的规则语法对比

    1. 查看系统有哪些可用的shell cat /etc/shell 2. 每种shell都有一个特殊内置变量来存上一条命令的退出状态,例: C/TC shell $status % cp fx fy ...

  3. Go语言学习之8 goroutine详解、定时器与单元测试

    主要内容: 1.Goroutine2. Chanel3. 单元测试 1. Goroutine Go 协程(Goroutine)(轻量级的线程,开线程没有数量限制).   (1)进程和线程 A. 进程是 ...

  4. 详述MySQL服务在渗透测试中的利用

    本文作者:i春秋签约作家——Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提 ...

  5. 文件包含上传漏洞&目录遍历命令执行漏洞

    文件上传漏洞: 一句话木马 一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量 执行函数: eval() assert() create_function() array_map() arr ...

  6. 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行

    背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...

  7. shell使用攻略

    shell 是什么 ~ $ ls /bin/*sh /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh 是什么 kernel shell 命令 ...

  8. DayuCMS 1.525 /include/global.func.php Foreground Arbitrary Code Execution

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link: http://joychou.org/in ...

  9. Shell编程基础教程6--shell函数

    6.shell函数    6.1.定义函数        简介:            shell允许将一组命令集或语句形成一个可用块,这些块成为shell函数        定义函数的格式      ...

随机推荐

  1. hdu 1829 &amp;poj 2492 A Bug&#39;s Life(推断二分图、带权并查集)

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  2. 生产环境中 Ngx_lua 使用技巧和应用的范例

    生产环境中 Ngx_lua 使用技巧和应用的范例 时间 -- :: 51CTO技术博客 原文 http://rfyiamcool.blog.51cto.com/1030776/1252501 主题 L ...

  3. jquery的基本api

    本文整理了一些主要的jQuery API,其中包括jQuery 核心函数和方法.jQuery属性参考手册.jQuery CSS操作.jQuery选择器.jQuery文档操作.jQuery筛选操作.jQ ...

  4. MyEclipse 2013安装后要做的几件事

    一.Myeclipse 2013修改字体 MyEclipse 2013是基于Eclipse3.7内核,但在Eclipse的Preferences-〉general-〉 Appearance->C ...

  5. App打包上架流程(iOS转)

    由于苹果的机制,在非越狱机器上安装应用必须通过官方的Appstore, 开发者开发好应用后上传Appstore,也需要通过审核等环节. AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传A ...

  6. HDU - 5017 Ellipsoid(模拟退火法)

    Problem Description Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distance bet ...

  7. 关于WPF界面框架MahApps.Metro的一个BUG

    碰到了这个问题,记录一下,以便以后查阅: 在一个WPF项目中使用MahApps.Metro界面框架,其中有一个功能是嵌入一个带句柄的标记. 首先WPF是出了窗体和WebBrowser带有句柄外,其他控 ...

  8. Java并发编程(八)不变性

    提到不变性我首先想到的就是String这个类了. 之前学习了很多原子性以及可见性的问题:失效数据,丢失更新操作或者某个对象的状态不一致,都与多线程试图访问同一个可变的相关. 如果对象的状态不会发生改变 ...

  9. OC 字符串出来

    //1.获取字符串的长度 NSString * str = @"abcd"; NSUInteger length = [str length]; //str.length; NSL ...

  10. 解决xshell6评估过期,需采购问题

    2018年12月20日补充 绿色免安装版: https://www.lanzous.com/i2njdre 密码:9b7t 2018年7月18日补充 感谢s***5大佬提供注册包,有需要的小伙伴,请留 ...