先说明一下:

如果第一个命令执行成功,与操作符 (&&)才会执行第二个命令

如果第一个命令执行失败,或操作符 (||)才会执行第二个命令

可以分析一下下面的命令的输出:

#!/bin/sh

echo "" &&  echo "" ||  echo "" && echo "" || echo "" || echo "" && echo "" && echo "" || echo "" 

下面是输出:

pengdl@debian:~/test/shell$ ./sh5.sh 

分析:

echo "1"  执行成功,所以执行echo "2"

echo "2" 执行成功,不执行 echo "3"

既然没有执行echo "3",可以看做不存在 “ " || echo "3" ”,echo "2"后紧接“ && echo "4" ”

echo "4" 执行成功,不执行echo "5"

既然没有执行echo "5",可以看做不存在 “ " || echo "5" ”,echo "4"后紧接“ || echo "6" ”

echo "4" 执行成功,不执行echo "6"

既然没有执行echo "6",可以看做不存在 “ " || echo "6" ”,echo "4"后紧接“ && echo "7" ”

echo "7" 执行成功,执行echo "8"

echo "8" 执行成功,不执行echo "9"

所以最终变成了:

echo "" &&  echo ""  && echo ""  && echo "" && echo ""

改变一下,比如当前目录没存在目录p,不存在文件7

#!/bin/sh

cd p  &&  echo "" ||  echo "" && echo "" || echo "" || echo "" && ls  "" && echo "" || echo "" 

下面是输出:

pengdl@debian:~/test/shell$ ./sh6.sh
./sh6.sh: line : cd: p: No such file or directory ls: cannot access : No such file or directory

如果想改变执行逻辑,可以加优先操作符()

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)

在上面的伪代码中,如果Command_x1执行失败,Command_x2不会执行,但是Command_x3会继续执行, Command_x4会依赖于 Command_x3的退出状态。

(Command_x1 &&Command_x2)

它的执行成功与否: 如果Command_x1执行成功,执行Command_x2 ,如果Command_x2执行成功,那么整个()执行成功,如果Command_x2执行失败,整个()执行失败。如果Command_x2不执行,整个()的执行成功与否取决于Command_x1。

可以分析一下下面的例子:

例一

#!/bin/sh

cd p && (echo "" || echo "") || (echo "" && echo "") && (ls  || echo "" || (echo "" && echo ""))

下面是输出:

./sh8.sh: line : cd: p: No such file or directory

ls: cannot access : No such file or directory

例二

#!/bin/sh

cd p && (echo "" || echo "") || (echo "" && cd p) && (ls  || echo "" || (echo "" && echo ""))

下面是输出:

./sh7.sh: line : cd: p: No such file or directory

./sh7.sh: line : cd: p: No such file or directory

例三:

#!/bin/bash

if  ls ./iii
then
echo ""
elif echo "" && ls ./i
then
echo ""
else
echo ""
fi

下面是输出:

pengdl@debian:~/test/shell$ ./sh8.sh
ls: cannot access ./iii: No such file or directory ls: cannot access ./i: No such file or directory

对shell中的与(&&)和或(||)的理解的更多相关文章

  1. linux shell 中的sleep命令

    开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...

  2. shell 中的与、或表达式

    今天总结一下linux shell中逻辑关机表达方式.逻辑与的表达: 1).if [ $xxx=a -a $xx=b ] 注:-a表示and的意思 2).if [ $xxx=a ] && ...

  3. shell简单用法笔记(shell中数值运算)二

    shell中变量值,如果不手动指定类型,默认都是字符串类型: 例如: a= b= c=$a+#b echo $c 结果会输出:123+456 shell中,如果要进行数值运算,可以通过一下方法: 方法 ...

  4. shell中{}的妙用

    shell中${}的妙用   1. 截断功能 ${file#*/}:       拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:    拿 ...

  5. shell中命令之间数据的传递

    1.管道 "|" ls | cat -n > out.txt 2. 子shell 2.1 子shell 说明 在shell脚本中可以用()操作符可以定义一个子shell #/ ...

  6. shell中&&和||的使用方法

    测试题: [ -z "" ] && echo 0 || echo 1 的结果是多少 看看这两个 && || 的用户  http://blog.csd ...

  7. 任督二脉之Shell中的正则表达式

    VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...

  8. shell中条件判断if中的-z到-d的意思

    shell中条件判断if中的-z到-d的意思 [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 ...

  9. shell中的循环

    shell中的循环 for循环 类似于C语言的步长控制 例如: ;i<=;i++)); ); done 将1到10,依次乘以4,然后打印出来. 这里顺便提一下,shell里面表达式的计算,可以有 ...

  10. shell中&&和||的使用方法_转

    shell中&&和||的使用方法 &&运算符:   command1  && command2   &&左边的命令(命令1)返回真(即返 ...

随机推荐

  1. Spark RDD概念学习系列之RDD是什么?(四)

       RDD是什么? 通俗地理解,RDD可以被抽象地理解为一个大的数组(Array),但是这个数组是分布在集群上的.详细见  Spark的数据存储 Spark的核心数据模型是RDD,但RDD是个抽象类 ...

  2. linux du命令: 显示文件、目录大小

    介绍:du命令用于显示指定文件(夹)在磁盘中所占的空间信息.假如指定的文件参数实际上是一个目录,就要计算该目录下的所有文件.假如 没有提供文件参数,执行du命令,显示当前目录内的文件占用空间信息. 语 ...

  3. all & any

    def all(*args, **kwargs): """ Return True if bool(x) is True for all values x in the ...

  4. Keil MDK Code、RO-data、RW-data、ZI-data数据段

      Program Size: Code=10848 RO-data=780 RW-data=372 ZI-data=868   Code 表示程序代码指令部分 存放在Flash区 RO-data 表 ...

  5. CodeForces 702 A Maximum Increase (贪心,高效算法)

    题意:给定 n 个数,问你连续的最长的序列是几个. 析:从头扫一遍即可. 代码如下: #include <cstdio> #include <string> #include ...

  6. Log设计

    Log设计 http://biancheng.dnbcw.info/net/380312.html http://blog.csdn.net/anyqu/article/details/7937378 ...

  7. JS 执行环境与作用域链

    1.执行环境 JavaScript 代码都是在执行环境中被执行的.执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域.生命周期等方面的处理,它定义了变量或函数是否有权访问其他数据 ...

  8. JS Flex交互:html嵌套Flex(swf)

    一.html页面嵌套Flex需要用到 swfobject.js swfobject的使用是非常简单的,只需要包含 swfobject.js这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入F ...

  9. hdu1232 畅通工程

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  10. Java常见排序算法之直接选择排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...