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函数 定义函数的格式 ...
随机推荐
- C语言基础(20)-文件操作(fopen,getc,fclose)
一.文件操作 读文件的顺序: 1.先打开文件 2.读写文件 3.关闭文件 1.1 fopen FILE *fopen( const char *path, const char *mode ); 函数 ...
- C语言基础(14)-递归
一. 递归的定义 函数可以调用自己,这就叫函数的递归. 先序递归和后序递归 #include <stdio.h> void test(int n); void test1(int n); ...
- hdu 2217 Visit
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2217 题目解释:起始位置在原点,给你固定的时间,让你左右跑,求在规定的时间内你最多能跑多少个点: 解决 ...
- java - day12 - ShapeTest
抽象类的定义及使用 抽象类不能实例化,但抽象类名的数组类型可以,见案例 package com.example; public class ShapeTest { public static void ...
- backtrace、backtrace_symbols
参考: http://www.th7.cn/Program/cp/201308/145700.shtml http://linux.die.net/man/3/backtrace http://man ...
- Shallow Heap & Retained Heap
所有包含Heap Profling功能的工具(MAT, Yourkit, JProfiler, TPTP等)都会使用到两个名词,一个是Shallow Size,另一个是 Retained Size. ...
- SharePoint管理中心配置内容数据库
SharePoint管理中心配置内容数据库 在SharePoint2010中,内容数据库是组织数据的核心. 是全部站点内容信息,如文档.列表数据和Web部件属性等存储的地方.默认地,内 ...
- tomcat的bin目录中startup.bat/tomcat.6.exe/tomcat6w.exe区别
一.tomcat6.exe 与 startup.bat的区别 1.两者都可以用于启动Tomcat tomcat6.exe则是必须将tomcat注册Windows服务之后才可以用于启动tomcat服务; ...
- EXCEL VBA代码,实现点击Sheet1按钮控件保存不连续单元格的数据到Sheet2中,然后清空输入内容
Private Sub SaveAndClear() Dim Header, Deatil, Order As Range Dim lastrow1, lastrow2 As Long Dim i A ...
- Struts2 主题和模板
实际本章教程开始之前,让我们看看由http://struts.apache.org给出的几个定义: Term 描述 tag A small piece of code executed from wi ...