对shell中的与(&&)和或(||)的理解
先说明一下:
如果第一个命令执行成功,与操作符 (&&)才会执行第二个命令
如果第一个命令执行失败,或操作符 (||)才会执行第二个命令
可以分析一下下面的命令的输出:
#!/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中的与(&&)和或(||)的理解的更多相关文章
- linux shell 中的sleep命令
开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...
- shell 中的与、或表达式
今天总结一下linux shell中逻辑关机表达方式.逻辑与的表达: 1).if [ $xxx=a -a $xx=b ] 注:-a表示and的意思 2).if [ $xxx=a ] && ...
- shell简单用法笔记(shell中数值运算)二
shell中变量值,如果不手动指定类型,默认都是字符串类型: 例如: a= b= c=$a+#b echo $c 结果会输出:123+456 shell中,如果要进行数值运算,可以通过一下方法: 方法 ...
- shell中{}的妙用
shell中${}的妙用 1. 截断功能 ${file#*/}: 拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}: 拿 ...
- shell中命令之间数据的传递
1.管道 "|" ls | cat -n > out.txt 2. 子shell 2.1 子shell 说明 在shell脚本中可以用()操作符可以定义一个子shell #/ ...
- shell中&&和||的使用方法
测试题: [ -z "" ] && echo 0 || echo 1 的结果是多少 看看这两个 && || 的用户 http://blog.csd ...
- 任督二脉之Shell中的正则表达式
VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...
- shell中条件判断if中的-z到-d的意思
shell中条件判断if中的-z到-d的意思 [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 ...
- shell中的循环
shell中的循环 for循环 类似于C语言的步长控制 例如: ;i<=;i++)); ); done 将1到10,依次乘以4,然后打印出来. 这里顺便提一下,shell里面表达式的计算,可以有 ...
- shell中&&和||的使用方法_转
shell中&&和||的使用方法 &&运算符: command1 && command2 &&左边的命令(命令1)返回真(即返 ...
随机推荐
- linux 从命令行自动识别文件并将其打开的命令
若是shell是 zsh,则可: 使用 alias -s 定义后缀别名 (zsh) % alias -s pl=perl % script.pl perl script.pl % alias -s p ...
- 第三百四十五天 how can I 坚持
最烦这个阶段了,飘忽不定,或许这种感觉未来会很值得回味. 我为什么会那么烦,是因为错过而悔恨,还是..其实我还是很在乎的,好想一切都随缘. 让我讲struts.springmvc,可是什么都不会. 我 ...
- 全文索引之nutch与hadoop(转)
原文:http://blog.csdn.net/chaofanwei/article/details/39476535 全文索引-lucene,solr,nutch,hadoop之lucene 全文索 ...
- 服务框架Dubbo(转)
add by zhj:该开源项目已经停止更新了,不过倒是可以学学该软件的架构设计 原文:http://www.oschina.net/p/dubbo Dubbo 是阿里巴巴公司开源的一个高性能优秀的服 ...
- JQ避免出现多次执行一个事件的解决方案
点击按钮之后会多次执行一个事件的话,就在方法结尾加入如下代码,这样的话事件就可以只执行一次了 //避免出现多次执行事件的问题 event.stopPropagation(); 此外,时间的重复绑定也有 ...
- CodeForces 702B Powers of Two (暴力,优化)
题意:给定 n 个数,问你从有多少下标 i < j,并且 ai + aj 是2的倍数. 析:方法一: 从输入开始暴力,因为 i < j 和 i > j 是一样,所以可以从前面就开始查 ...
- sublime text 3 licence code
Update:2016年3月9日09:14:12 可用 —– BEGIN LICENSE —–Michael BarnesSingle User LicenseEA7E-8213858A353C41 ...
- c++ 中文字符串处理方法
转自:http://hi.baidu.com/hehehehello/item/dcc44a4a6afc690e6dc2f08b C++处理中文的问题困扰我很久了.之前一旦遇到中文基本就投诸java怀 ...
- AutoCAD 2007在win8.1安装出现——错误1606。无法访问网络位置Autodesk\AutoCAD2007\R17.0\chs\的解决
环境win 8.1 64位,AutoCAD 2007 安装CAD2007,一开始安装就出错,提示:错误1606.无法访问网络位置Autodesk\AutoCAD2007\R17.0\chs\ 百度之后 ...
- 一分钟制作U盘版BT3 - 有图滴儿 bt3破解教程
一分钟制作 BT3 U盘版方便,快捷简单无效不退款 光盘版BT3, 大概694MB,直接刻盘,然后用光盘引导,就可以进入bt3,连接为:http://ftp.heanet.ie/mirrors/bac ...