func && operation_yes || operation_no (Shell)
通过&&, || 理解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)的更多相关文章
- shell 10流程控制
if 判断 if #shell #!/bin/sh a=5 if [[ $a > 3 ]];then echo "$a>3" fi #写成一行 if [[ $a < ...
- UNIX shell 学习笔记 一 : 几个shell的规则语法对比
1. 查看系统有哪些可用的shell cat /etc/shell 2. 每种shell都有一个特殊内置变量来存上一条命令的退出状态,例: C/TC shell $status % cp fx fy ...
- Go语言学习之8 goroutine详解、定时器与单元测试
主要内容: 1.Goroutine2. Chanel3. 单元测试 1. Goroutine Go 协程(Goroutine)(轻量级的线程,开线程没有数量限制). (1)进程和线程 A. 进程是 ...
- 详述MySQL服务在渗透测试中的利用
本文作者:i春秋签约作家——Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提 ...
- 文件包含上传漏洞&目录遍历命令执行漏洞
文件上传漏洞: 一句话木马 一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量 执行函数: eval() assert() create_function() array_map() arr ...
- 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...
- shell使用攻略
shell 是什么 ~ $ ls /bin/*sh /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh 是什么 kernel shell 命令 ...
- DayuCMS 1.525 /include/global.func.php Foreground Arbitrary Code Execution
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link: http://joychou.org/in ...
- Shell编程基础教程6--shell函数
6.shell函数 6.1.定义函数 简介: shell允许将一组命令集或语句形成一个可用块,这些块成为shell函数 定义函数的格式 ...
随机推荐
- 如何将webbrowser控件的Cookie倒入CookieContainer供WebRequest使用
先建一个 "CookieContainer " 把WebBrowser中的Cookie保存在里面 //在WebBrowser中登录 ...
- Python内置函数之classmethod()
函数的参数是一个函数: classmethod(func) 作用是,在外部,类对象能够直接调用类方法. 常用来作为装饰器. >>> class C: ... def f(self): ...
- mysql命令:set sql_log_bin=on/off
对于数据库的操作,经常需要暂时停止对bin-log日志的写入,那就需要这个命令:set sql_log_bin=on/off 参考:dev.mysql.com/doc/refman/5.5/en/se ...
- python c example2:pylame2
#include <Python.h> #include <lame.h> //pyton object variables typedef struct{ PyObject_ ...
- org.tmatesoft.svn.core.SVNCancelException: svn: E200015: authentication canc
重新添加一个凭证,用新的凭证 第二总是取最新的代码,而不是用update 有问题,问哥
- Hibernate命名查询
hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...
- 通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML. JavaScript 能够改变页面中的所有 HTML 元素 JavaScript 能够改变页面中的所有 HTML ...
- node.js 入门
什么是Node.js?还服务器端javascript?对于这个概念我在这篇文章不做解释,可以自己去搜索了解下,服务器端js不是新技术,只是最近的node.js的火爆让他爆发了,我会在以后的文章里解释什 ...
- ROS导航之地图costmap_2d与bresenham算法
读者可以参读http://wiki.ros.org/costmap_2d costmap_2d: 无论是激光雷达还是如kinect 或xtion pro深度相机作为传感器跑出的2D或3D SLAM ...
- flask session 使用默认配置修改session不生效问题
flask session相关 使用flask 默认sessio是存储在浏览器的cookie中,当请求返回时会将session写在cooKie中,但是在写的时候,默认并不是每次都重新写入 比如下例子 ...