0

我有一个始终执行的 if 语句,但我不知道为什么。

这是代码:

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

如果为真,则要执行的代码。

问题是,if 语句之后的东西总是执行,不管它是否正确。

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

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

我不确定发生了什么,任何帮助将不胜感激。谢谢你。

4

1 回答 1

3

使用awk命令完成将失败,因为您不能依赖awk(shell 中不支持布尔值)的退出状态。相反,只需使用grep它自己来匹配boolean logic。通过在您的原始 POST 中提供一些示例输入和匹配规则,我将帮助您做到这一点。


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

而且,

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

如果子命令有输出,这将起作用。你可以先测试一下。

于 2013-03-25T22:50:39.067 回答