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函数 定义函数的格式 ...
随机推荐
- hdu 1829 &poj 2492 A Bug's Life(推断二分图、带权并查集)
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- 生产环境中 Ngx_lua 使用技巧和应用的范例
生产环境中 Ngx_lua 使用技巧和应用的范例 时间 -- :: 51CTO技术博客 原文 http://rfyiamcool.blog.51cto.com/1030776/1252501 主题 L ...
- jquery的基本api
本文整理了一些主要的jQuery API,其中包括jQuery 核心函数和方法.jQuery属性参考手册.jQuery CSS操作.jQuery选择器.jQuery文档操作.jQuery筛选操作.jQ ...
- MyEclipse 2013安装后要做的几件事
一.Myeclipse 2013修改字体 MyEclipse 2013是基于Eclipse3.7内核,但在Eclipse的Preferences-〉general-〉 Appearance->C ...
- App打包上架流程(iOS转)
由于苹果的机制,在非越狱机器上安装应用必须通过官方的Appstore, 开发者开发好应用后上传Appstore,也需要通过审核等环节. AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传A ...
- HDU - 5017 Ellipsoid(模拟退火法)
Problem Description Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distance bet ...
- 关于WPF界面框架MahApps.Metro的一个BUG
碰到了这个问题,记录一下,以便以后查阅: 在一个WPF项目中使用MahApps.Metro界面框架,其中有一个功能是嵌入一个带句柄的标记. 首先WPF是出了窗体和WebBrowser带有句柄外,其他控 ...
- Java并发编程(八)不变性
提到不变性我首先想到的就是String这个类了. 之前学习了很多原子性以及可见性的问题:失效数据,丢失更新操作或者某个对象的状态不一致,都与多线程试图访问同一个可变的相关. 如果对象的状态不会发生改变 ...
- OC 字符串出来
//1.获取字符串的长度 NSString * str = @"abcd"; NSUInteger length = [str length]; //str.length; NSL ...
- 解决xshell6评估过期,需采购问题
2018年12月20日补充 绿色免安装版: https://www.lanzous.com/i2njdre 密码:9b7t 2018年7月18日补充 感谢s***5大佬提供注册包,有需要的小伙伴,请留 ...