Shell中的&&与||的区别

那个 || 刚好完全跟 && 相反,当前一个指令有错误时,在 || 后面的指令才会被执行! (要注意,那个 | 
是两个 | ,而 | 按键则是反斜线 同一个按键, 因此,按下 [Shift] 加上 [] 就会出现那个 | 啰!) 
因此,简单的来说,当 ls /tmp/vbirding 发生错误时,才会使用 touch /tmp/vbirding 去建立这个档案
的意思。 是否很有趣啊?这个 || 及 && 对于系统管理员在管理某些档案权限、存在等问题时, 可是很
有用的东西喔!好了,现在我们来玩比较难一点的,看看底下的例题: 
例题:以 ls 测试 /tmp/vbirding 是否存在,若存在则显示 "exist" ,若不存在,则显示 "not 
exist"! 
答:  
       这又牵涉到逻辑判断的问题,如果存在就显示某个数据,若不存在就显示其它数据,
       那我可以这样做:  
               
              ls /tmp/vbirding && echo "exist" || echo "not exist" 
        
       意思是说,当 ls /tmp/vbirding 执行后,若正确,就执行 echo "exist" ,若有问
       题,就执行 echo "not exist" !那如果我写成:  
               
              ls /tmp/vbirding || echo "not exist" && echo "exist" 
        
       对不对啊?这其实是有问题的,为什么呢?因为指令是一个一个往下执行,因此,在
       上面的例子当中,如果 /tmp/vbirding 不存在时,他会:  
               
              1. 若 ls /tmp/vbirding 不存在,因此回传一个非为 0 的数值;  
          2.  接下来经过 || 的判断,发现前一个指令回传非为 0 的数值,因此,程序开
              始执行 echo "not exist" ,而 echo "not exist" 程序肯定可以执行成功,
              因此会回传一个 0 值给后面的指令;  
          3.  经过 && 的判断,咦!是 0 啊!所以就开始执行 echo "exist" 。 
        
       所以啊,嘿嘿!第二个例子里面竟然会同时出现 not exist 与 exist 呢!真神奇~ 
 
经过这个范例的练习,您应该会了解,由于指令是一个接着一个去执行的,因此,如果真要使用判断, 那
么这个 && 与 || 的顺序就不能搞错~一般来说,判断式最多会有三个,也就是:  
       command1 && command2 || command3 
而且顺序通常不会变,因为一般来说, command2 与 command3 会放置肯定可以执行成功的指令, 因此,
依据上面例题的逻辑分析,您就会晓得为何要如此放置啰~这很有用的啦! 而且.....考试也很常考~
原文地址:https://www.cnblogs.com/double12gzh/p/10166259.html