我有一个始终执行的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没有在另一台机器上运行时,它不会返回任何内容。
我不确定是什么意思,任何帮助都会受到赞赏。谢谢。
答案 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
如果子命令有输出,将起作用。你可以先测试一下。