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

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
vincent_zh
帖子: 129
注册时间: 2008-04-05 10:56
来自: 学校
送出感谢: 0
接收感谢: 0
联系:

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

#1

帖子 vincent_zh » 2008-04-14 12:52

我知道下面一句话的作用是判断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
修己,安人
mr.wsr
帖子: 9
注册时间: 2008-01-31 17:07
送出感谢: 0
接收感谢: 0

#2

帖子 mr.wsr » 2008-04-15 14:33

我想可以这么理解:

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

如:
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$
头像
vincent_zh
帖子: 129
注册时间: 2008-04-05 10:56
来自: 学校
送出感谢: 0
接收感谢: 0
联系:

#3

帖子 vincent_zh » 2008-04-15 14:55

是这样子执行的???
但我不明白为什么会这样子执行呢??
修己,安人
头像
vincent_zh
帖子: 129
注册时间: 2008-04-05 10:56
来自: 学校
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 vincent_zh » 2008-04-16 9:14

我弄懂了
因为||的优先级低于&&的优先级,就是这样子而已
修己,安人
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#5

帖子 eexpress » 2008-04-16 9:28

类似C的那种:?: 的语法了
为真执行 &&
为假执行 ||

单条语句经常这么写的。
● 鸣学
头像
yaoms
帖子: 4953
注册时间: 2007-10-19 14:51
来自: 深圳
送出感谢: 0
接收感谢: 2 次

#6

帖子 yaoms » 2008-04-16 9:32

vincent_zh 写了:我弄懂了
因为||的优先级低于&&的优先级,就是这样子而已
||和&&的优先级是相同的。
只是如果第一个为真的话,到第二个那里就短路了,所以第三个不执行。
如果第一个为假,第二个也被自动忽略了,就去执行第三个了。
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
头像
vincent_zh
帖子: 129
注册时间: 2008-04-05 10:56
来自: 学校
送出感谢: 0
接收感谢: 0
联系:

#7

帖子 vincent_zh » 2008-04-17 16:50

不是吧,&&的优先级是高过||的
修己,安人
头像
yaoms
帖子: 4953
注册时间: 2007-10-19 14:51
来自: 深圳
送出感谢: 0
接收感谢: 2 次

#8

帖子 yaoms » 2008-04-17 17:02

vincent_zh 写了:不是吧,&&的优先级是高过||的
你自己写几行代码试试吧。
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
头像
HuntXu
论坛版主
帖子: 5778
注册时间: 2007-09-29 3:09
送出感谢: 0
接收感谢: 6 次

#9

帖子 HuntXu » 2008-04-19 23:48

yaoms 写了:
vincent_zh 写了:不是吧,&&的优先级是高过||的
你自己写几行代码试试吧。


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

搞定~
回复

回到 “Shell脚本”