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: 2014-12-21

func1()
{
    echo "-----------123a-----------------------"
    [ -z $(echo "123a"|sed ‘s/[0-9]//g‘) ] && echo "all digits" || echo "not all digits"
}

func2()
{
    echo "-----------123-----------------------"
    [ -z $(echo "123"|sed ‘s/[0-9]//g‘) ] && return 0 || return 1
    #                        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 0
-----------123-----------------------
func2() returns 0
-----------123-----------------------
all digits
时间: 2024-10-11 06:51:29

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

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

本文作者:i春秋签约作家--Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提权 导出木马到启动项提权 反弹端口提权 MySQL提权综合姿势 part1 mysql之UDF提权 首先什么是UDF? UDF为`User Defined Function`-用户自定义函数,也就是支持用户自定义函数的功能.看这个名字应该就理解了一半了. MySQL是最流行的开放源码SQL数据库管理

linux shell 之尝试编写 企业级 启动脚本

企业Shell面试题10:开发企业级MySQL启动脚本 说明: MySQL启动命令为: 1 /bin/sh mysqld_safe --pid-file=$mysqld_pid_file_path 2>&1 >/dev/null & 停止命令逻辑脚本为: 1 2 3 4 5 6 mysqld_pid=`cat "$mysqld_pid_file_path"` if (kill -0 $mysqld_pid 2>/dev/null)   then    

每篇半小时1天入门MongoDB——2.MongoDB环境变量配置和Shell操作

上一篇:每篇半小时1天入门MongoDB——1.MongoDB介绍和安装 配置环境变量 Win10系统为例 右键单击“此电脑”——属性——高级系统设置——高级——环境变量,添加C:\Program Files\MongoDB\Server\3.0\bin;.注意:要以;隔开各种变量. 这样的话就可以直接在CMD命令窗口中输入mongo 表示环境变量设置成功,并已经连接到默认数据库test中. 我们可以输入mongod --help来查看相关的帮助信息 C:\Users\zouqi>mongod

Shell 函数、数组与正则表达式

防伪码:白日依山尽,黄河入海流. 5.1  函数 格式: func() { command } 示例 1: #!/bin/bash func() { echo "This is a function." } func # bash test.sh This is a function. Shell 函数很简单,函数名后跟双括号,再跟双大括号.通过函数名直接调用,不加小括号. 示例 2:函数返回值 #!/bin/bash func() { VAR=$((1+1)) return $VAR

shell简单使用(三)函数

shell函数简单使用 #!/bin/bash func(){ echo "Run into func" echo $* echo "func id $$" echo "Exit func" } func $6 $7 $8 $9 echo $* echo "script id $$" 执行结果如下: 其中可以看出参数是怎么传递的.所在进程的id号在函数内外一样

Bash shell 笔记总结(一) 转自http://www.bubuko.com/infodetail-509992.html,谢谢原作者

本文是上课笔记总结,涉及细节知识点会在以后文章说明! bash脚本编程: 脚本程序:解释器解释执行: shell: 交互式接口:编程环境: shell: 能够提供一些内部命令,并且能通过PATH环境变量找到外部命令:把命令提交给内核启动为进程: 编程环境: 流程控制语句: 顺序执行: 循环执行: 选择执行: 条件测试:真.假 $? 命令的状态结果: 0: 真 1-255: 假 过程式的编程语言的元素:变量.流程.函数.数组 变量:局部变量.本地变量.环境变量.位置参数变量.特殊变量 变量: 数值

Shell编程关于函数要注意的几点

今天上午一个朋友突然QQ问到,shell编程中的函数为什么return只能是整数,怎么样才能将函数的执行结果返回并保存至某个变量中.其实这个问题很好解决---只需要认真了解下shell函数即可. shell编程中关于函数需要知道的几点 一.无论是在函数内,还是在函数外,$0的值都是该脚本本身.     [[email protected] ~]# cat test.sh     #!/bin/bash          echo $0          function testFunc(){

linux shell入门

第一个shell脚本 程序 #!/bin/sh #第一行统一这样写 echo 'abc' #输出abc 运行(是因为目录不对) [email protected]:~$ test.sh test.sh: command not found 方案一 [email protected]:~$ sh test.sh abc 方案二(没有权限) [email protected]:~$ ~/test.sh -bash: /home/liuil/test.sh: Permission denied 方案二

AWK文本处理增强shell功能--AWK完全手册

AWK是一种优良的文本处理工具.它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一. 本文主要摘录池中龙写的Unixawk使用手册(第二版),对其中内容稍微改动.感谢作者的分享. 目 录 1 0作者的话 2 1awk的调用方式 3 2awk的语法 4 3awk的记录.字段与内置变量 5 4awk的内置函数 5 5在命令行使用awk 6 6awk的变量 7 7运算与判断 7 8awk的流程控制 8 8.1BEGIN和END: 8 8.2流程控制语句 9 8.2.1if...e