找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 1670|回复: 1

关于shell命令中&&(与)、||(或)判断符号用法及和-a、-o的区别

[复制链接]
发表于 2020-4-11 12:54 | 显示全部楼层 |阅读模式
&&和-a都表示“与”判断,比如:
if [ ! $1 == 1 ] && [ $2 ==2 ] ; then
echo “OK!”
fi

if [ ! $1 == 1 -a $2 ==2 ] ; then
echo “OK!”
fi
都是判断$1 != 1 并且$2 = 2时就OK!一般情况下两种用法都可以,但是有区别:
&&表示前者判断成功,才会执行后者。而-a则两者都会执行再去判断。
[ ! $1 == 1 ] 有两种情况:$1存在且不是1的其它数字[0 2-9]、$1为空。如果用[ ! $1 == 1 ] && [ $2 ==2 ] ,$1为空时就不会执行 [ $2 ==2 ] ,所以无法执行。如果用[ ! $1 == 1 -a $2 ==2 ] ,则完全无问题。

||和-o都可用来表示“或”判断。|| 和-o 却和“&&和-a”不太一样,||表示前者判断成功就执行后者判断,[ ! $1 == 1 ] || [ $2 ==2 ],$1不论是空还是[0 2-9],都表示判断成功(即不等于1),都会执行后者[ $2 ==2 ] ,所以就没有前面&&的担忧,和[ ! $1 == 1 -o $2 ==2 ]是一样的。

另外,和前面所说,&&表示前面执行成功则执行后面的,||表示前面执行不成功则执行后面的,所以就有这种用法:
打电话给MM如果接通 && 约她 ------前面成功,就有后续
打电话给MM如果接通 || 打给另一个 ------这个不用说啦

然后又有这种用法:
打电话给MM如果接通 && 约她 && 请去吃饭 && 去开房 && 发朋友圈 (表示以前一步骤为成功条件逐步执行所有命令)
打电话给MM如果接通 && 约她 && 请去吃饭 && 去开房 || 打给另一个 (开房这个步骤不成功,就执行约另一个,设定的前面步骤不成功,就换另一个操作)

实际用法:
HTB=(ucigetcowbqos.@cowbqos[0].HTB2>/dev/null) || HTB=1这个表示,前面取值如果存在,就使用取得的值,如果不存在(执行错误),就赋予1值。
如果使用 HTB=(uci get cowbqos.@cowbqos[0].HTB 2>/dev/null) && HTB=1 表示前面取值存在,就赋予1,如果不存在,就没有然后了。如果还想要然后,可以这样:
HTB=(ucigetcowbqos.@cowbqos[0].HTB2>/dev/null) && HTB=1 || HTB=0 ,表示如果取值成功,就赋予1(事实上不叫赋予,是替换),不成功,就赋予0

但是不能这样用:HTB=(ucigetcowbqos.@cowbqos[0].HTB 2>/dev/null) || HTB=1 && CCC=1
原本你是希望取值失败就HTB=1 && CCC=1同时执行的,但是事与愿违,不论取值是成功或者失败,CCC=1都会执行,等同于:HTB=(ucigetcowbqos.@cowbqos[0].HTB 2>/dev/null) || HTB=1 ; CCC=1。

下面又有个问题:
打电话给MM如果接通 && 约她 && 请去吃饭 && 去开房 && 发朋友圈
打电话给MM如果接通 ; 约她 ; 请去吃饭 ; 去开房 ; 发朋友圈

两者有区别吗?如果事情顺利的话,两者得到的结果一样。但是不顺利却完全不一样。
前者任意一个步骤不顺利,就在该步骤终结,后续不会再做。
后者完全不一样,任何步骤不顺利,所有步骤都会做完(毕竟那些事情一个人也可以做)。即后者没有因果判断,只有前后顺序的区别。


我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-4-11 13:29 | 显示全部楼层
看了后有点启发
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 23:33

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表