通过&&, || 理解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进行调换即可):

#!/bin/bash
#File: demo.sh
#Author: lxw
#Time: -- func1()
{
echo "-----------123a-----------------------"
[ -z $(echo "123a"|sed 's/[0-9]//g') ] && echo "all digits" || echo "not all digits"
} func2()
{
echo "-----------123-----------------------"
[ -z $(echo ""|sed 's/[0-9]//g') ] && return || return
# return value: 0_yes 1_no
} func1
echo "func1() returns" $? func2
#函数的返回值实际上就是函数的退出状态
echo "func2() returns" $?
func2 && echo "all digits" || echo "not all digits"

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

执行结果:

-----------123a-----------------------
not all digits
func1() returns
----------------------------------
func2() returns
----------------------------------
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. 如何将webbrowser控件的Cookie倒入CookieContainer供WebRequest使用

    先建一个 "CookieContainer "   把WebBrowser中的Cookie保存在里面                       //在WebBrowser中登录 ...

  2. Python内置函数之classmethod()

    函数的参数是一个函数: classmethod(func) 作用是,在外部,类对象能够直接调用类方法. 常用来作为装饰器. >>> class C: ... def f(self): ...

  3. mysql命令:set sql_log_bin=on/off

    对于数据库的操作,经常需要暂时停止对bin-log日志的写入,那就需要这个命令:set sql_log_bin=on/off 参考:dev.mysql.com/doc/refman/5.5/en/se ...

  4. python c example2:pylame2

    #include <Python.h> #include <lame.h> //pyton object variables typedef struct{ PyObject_ ...

  5. org.tmatesoft.svn.core.SVNCancelException: svn: E200015: authentication canc

    重新添加一个凭证,用新的凭证 第二总是取最新的代码,而不是用update 有问题,问哥

  6. Hibernate命名查询

    hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...

  7. 通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

    通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML. JavaScript 能够改变页面中的所有 HTML 元素 JavaScript 能够改变页面中的所有 HTML ...

  8. node.js 入门

    什么是Node.js?还服务器端javascript?对于这个概念我在这篇文章不做解释,可以自己去搜索了解下,服务器端js不是新技术,只是最近的node.js的火爆让他爆发了,我会在以后的文章里解释什 ...

  9. ROS导航之地图costmap_2d与bresenham算法

    读者可以参读http://wiki.ros.org/costmap_2d   costmap_2d: 无论是激光雷达还是如kinect 或xtion pro深度相机作为传感器跑出的2D或3D SLAM ...

  10. flask session 使用默认配置修改session不生效问题

    flask session相关 使用flask 默认sessio是存储在浏览器的cookie中,当请求返回时会将session写在cooKie中,但是在写的时候,默认并不是每次都重新写入 比如下例子 ...