Shell脚本:如何打开“virsh list |” grep MediaWiki“转换为if条件?

我试图确定给定的虚拟机是否正在使用shell脚本运行。

当手动运行时,“virsh list | grep MediaWiki”命令在虚拟机正在运行时返回一行,如果没有,则返回任何内容。

我正在尝试使用:

if [`virsh list | grep MediaWiki` !== ""] then echo "The MediaWiki VM is Running!" else echo "Not Running!" fi 

但是我不认为我的语法是正确的。 用上面的代码,它声称机器正在运行,不pipe它是否。

你有一个感叹号,后面跟两个等号“不相等”。 应该是“!=”。 也需要在左方括号之后有一个空格,右方括号之前有一个空格。 此外,要testing这样的空string,你必须使用双方括号。 执行命令replace的首选方法是使用$()而不是反引号。

 if [[ $(virsh list | grep MediaWiki) != "" ]] 

这一切都假定你正在使用像Bash这样的支持这些function的shell。 如果没有,那么这应该工作:

 if [ `virsh list | grep MediaWiki` ] 

如果你不需要grep结果,你可以检查grep -q返回值。 如果匹配的话它返回0。

 if virsh list | grep -q MediaWiki then echo "The MediaWiki VM is Running!" else echo "Not Running!" fi 

要记住的一件事是,如果你的命令返回null或者“”,那么你想用旧的DOS技巧来比较空值:

 #!/bin/sh foo=`<command stuff here>` if [ "X$foo" == "X" ] then echo "returned null" else echo "return positive" fi 

看看脚本指南