我正在尝试使用 shell 脚本确定给定的虚拟机是否正在运行。
命令“virsh list | grep MediaWiki”在手动运行时,如果虚拟机正在运行,则返回一行,否则,不返回任何内容。
我正在尝试使用:
if [`virsh list | grep MediaWiki` !== ""]
then
echo "The MediaWiki VM is Running!"
else
echo "Not Running!"
fi
但我觉得我的语法不太正确。上面的代码表明机器正在运行,无论它是否运行。
答案1
您有一个感叹号,后面跟着两个等号,表示“不等”。应该是“!=”。此外,左方括号后和右方括号前也需要有一个空格。此外,要针对这样的空字符串进行测试,您必须使用双方括号。执行命令替换的首选方法是使用$()
而不是反引号。
if [[ $(virsh list | grep MediaWiki) != "" ]]
这一切都假设你正在使用支持这些功能的 shell,比如 Bash。如果没有,那么这应该可以工作:
if [ `virsh list | grep MediaWiki` ]
答案2
grep -q
如果不需要 grep 结果,可以检查返回值。如果匹配,则返回 0。
if virsh list | grep -q MediaWiki
then
echo "The MediaWiki VM is Running!"
else
echo "Not Running!"
fi
答案3
需要记住的一件事是,如果您的命令返回 null 或“”,那么您需要使用旧的 DOS 技巧来比较空值:
#!/bin/sh
foo=`<command stuff here>`
if [ "X$foo" == "X" ]
then
echo "returned null"
else
echo "return positive"
fi
查看脚本指南