LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 757|回复: 13

关于&&[基本解决]

[复制链接]
发表于 2004-4-26 21:25:29 | 显示全部楼层 |阅读模式
命令1 &&命令2 表示如果命令1执行成功则执行命令2
但是这是不是表示命令1已经执行完毕呢?!?!?!?

同样的$? 代表上条命令返回的结果,他是否是等待上条命令执行完毕以后才检测返回的结果呢?

如果不是,那如何判断命令已经执行完毕~~~~
发表于 2004-4-26 21:50:43 | 显示全部楼层
1>当然是执行完毕!,如果没有成功执行,则返回失败.
2>$?反映的是最后命令的退出状态值
发表于 2004-4-26 21:51:09 | 显示全部楼层
1 && 2: 1 如果没有执行完怎么会知道是否成功?(反问句型)
发表于 2004-4-26 21:52:37 | 显示全部楼层
$ ls ; echo '我敢肯定,前面的 ls 一定执行完了!'
:p
 楼主| 发表于 2004-4-26 22:00:05 | 显示全部楼层

谢谢,但是还不明白

我觉得从逻辑上将,命令是否成功执行和是否执行完毕是不一样的~
就好象你成功射门,但是是否进球却不一定~~~~
可能我理解的有偏差~~~

$?反映的是最后命令的退出状态值---在脚本里如果
find / -name aaa
if [$? = 0]
   ./autobak

在判断[$? = 0]的时候是否会等待find / -name aaa 执行完毕再去判断退出状态值呢?(因为他可能会很长时间)

不太理解,谢谢大家了!
发表于 2004-4-26 22:04:42 | 显示全部楼层
脚本里的 command 是顺序执行的,shell 不是先知,它不知道一个 command 会执行多长时间
 楼主| 发表于 2004-4-26 22:08:16 | 显示全部楼层
所以啊,我如果前面一条命令没有执行完毕后一条命令就开始执行,这不符合我的要求~~~~

我想要在前一行命令执行完毕后(返回全部结果以后),再执行下一行命令
发表于 2004-4-26 22:13:49 | 显示全部楼层
最初由 小看红尘 发表


我想要在前一行命令执行完毕后(返回全部结果以后),再执行下一行命令


  1. cmd1
  2. case $? in
  3. 0)  cmd2;;
  4. *)  cmd3;;
  5. esac
复制代码
 楼主| 发表于 2004-4-26 22:25:17 | 显示全部楼层
cmd1
case $? in
0)  cmd2;;
*)  cmd3;;
esac
如果cmd1正在执行中$?返回的是0还是1?
发表于 2004-4-26 22:29:44 | 显示全部楼层
最初由 小看红尘 发表
cmd1
case $? in
0)  cmd2;;
*)  cmd3;;
esac
如果cmd1正在执行中$?返回的是0还是1?

$?:返回最后一个命令的状态!执行成功,返回0,否则返回非0的数值
你说他是返回0还是1 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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