Назад | Перейти на главную страницу

Shell Script: Как включить «virsh list | grep MediaWiki »в условие if?

Я пытаюсь определить, работает ли данная виртуальная машина, используя сценарий оболочки.

Команда "virsh list | grep MediaWiki" при запуске вручную возвращает одну строку, если виртуальная машина запущена, и ничего не возвращает, когда это не так.

Я пытаюсь использовать:

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

Но я не думаю, что у меня правильный синтаксис. С помощью приведенного выше кода он утверждает, что машина работает, независимо от того, работает она или нет.

Вы можете проверить возвращаемое значение grep -q если вам не нужны результаты grep. Он возвращает 0, если что-то совпало.

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

У вас есть восклицательный знак, за которым следуют два знака равенства для «не равно». Должно быть "! =". Также должен быть пробел после левой квадратной скобки и один перед правой квадратной скобкой. Кроме того, чтобы проверить такую ​​нулевую строку, вы должны использовать двойные квадратные скобки. Предпочтительный способ подстановки команд - использовать $() вместо обратных кавычек.

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

Все это предполагает, что вы используете оболочку вроде Bash, которая поддерживает эти функции. Если нет, то это должно сработать:

if [ `virsh list | grep MediaWiki` ]

Следует иметь в виду, что если ваша команда возвращает null или "", то вы хотите использовать старый трюк DOS для сравнения значений NULL:

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

Проверьте руководство по написанию сценариев