Shell脚本if语句子句始终执行

时间:2013-03-25 22:48:10

标签: shell if-statement xen

我有一个始终执行的if语句,我不确定原因。

以下是代码:

var=dom1
if(var=$(ssh root@192.168.0.200 /usr/sbin/xm li | grep dom1 | awk '{print $1}')); then

然后执行的代码如果为true。

问题是,if语句之后的东西总是执行,无论它是否真实。

if语句中的命令有效,因为我手动尝试过。

xm li只提供所有正在运行的虚拟机,其余部分确保返回的唯一内容是虚拟机的名称。当dom1在另一台机器上运行时,它返回dom1。当dom1没有在另一台机器上运行时,它不会返回任何内容。

我不确定是什么意思,任何帮助都会受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:3)

使用awk命令完成将失败,因为您无法依赖awk的退出状态(在shell中不具有布尔值)。相反,只需使用grep本身来匹配布尔逻辑。通过提供一些样本输入和在原始POST中匹配规则,我会帮助你做到这一点。


如果您真的想在帖子中使用awk,请采用解决方法:

更多,

var=$(ssh root@192.168.0.200 /usr/sbin/xm li | awk '/dom1/{print $1}')
if [[ $var ]]; then
    # ...
fi
如果子命令有输出,

将起作用。你可以先测试一下。

相关问题