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

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

但我觉得我的语法不太正确。上面的代码表明机器正在运行,无论它是否运行。

答案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

查看脚本指南

相关内容