分页: 1 / 1

请哪位大侠具体解释下这个shell语句的执行时的顺序和条件的转移

发表于 : 2008-04-14 12:52
vincent_zh
我知道下面一句话的作用是判断var变量是不是一个整数,但我不明白的是&&后面的两个语句,为什么当var变量是整数时就会执行echo $var is an interger,而var变量不是整数时就会执行echo $var is not an interger,语句是怎么做到这一点的呢??请哪位大侠详细解释下,不胜感激

echo $var | grep -q ‘^[-]\?[0-9]\+$’ && echo $var is an interger || echo $var is not an interger

发表于 : 2008-04-15 14:33
mr.wsr
我想可以这么理解:

当前面的语句执行成功后就会执行&&后面的语句 ,否则如果执行失败的话就执行 ||后面的语句

如:
mrwsr@Mr:/tmp/test$ ls
mrwsr@Mr:/tmp/test$
mrwsr@Mr:/tmp/test$ ls test.txt && echo '文件已存在' || echo '文件不存在'
ls: test.txt: No such file or directory
文件不存在
mrwsr@Mr:/tmp/test$ touch test.txt
mrwsr@Mr:/tmp/test$ ls test.txt && echo '文件已存在' || echo '文件不存在'
test.txt
文件已存在
mrwsr@Mr:/tmp/test$

发表于 : 2008-04-15 14:55
vincent_zh
是这样子执行的???
但我不明白为什么会这样子执行呢??

发表于 : 2008-04-16 9:14
vincent_zh
我弄懂了
因为||的优先级低于&&的优先级,就是这样子而已

发表于 : 2008-04-16 9:28
eexpress
类似C的那种:?: 的语法了
为真执行 &&
为假执行 ||

单条语句经常这么写的。

发表于 : 2008-04-16 9:32
yaoms
vincent_zh 写了:我弄懂了
因为||的优先级低于&&的优先级,就是这样子而已
||和&&的优先级是相同的。
只是如果第一个为真的话,到第二个那里就短路了,所以第三个不执行。
如果第一个为假,第二个也被自动忽略了,就去执行第三个了。

发表于 : 2008-04-17 16:50
vincent_zh
不是吧,&&的优先级是高过||的

发表于 : 2008-04-17 17:02
yaoms
vincent_zh 写了:不是吧,&&的优先级是高过||的
你自己写几行代码试试吧。

发表于 : 2008-04-19 23:48
HuntXu
yaoms 写了:
vincent_zh 写了:不是吧,&&的优先级是高过||的
你自己写几行代码试试吧。
echo $var | grep -q ‘^[-]\?[0-9]\+$’ || echo $var is not an interger && echo $var is an interger

搞定~