Shell Script: Como faço para virar “lista virsh | grep MediaWiki ”em uma condição if?

1

Estou tentando determinar se uma determinada Máquina Virtual está sendo executada usando um script de shell.

O comando "virsh list | grep MediaWiki", quando executado manualmente, retorna uma linha se a máquina virtual estiver em execução e não retorna nada quando não estiver.

Estou tentando usar:

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

Mas eu não acho que eu tenha a sintaxe certa. Com o código acima, ele afirma que a máquina está funcionando, seja ou não.

    
por Nick 13.09.2009 / 06:12

3 respostas

2

Você tem um ponto de exclamação seguido por dois sinais de igual para "não igual". Deve ser "!=". Também deve haver um espaço após o colchete esquerdo e um antes do colchete direito. Além disso, para testar uma string nula como essa, você precisa usar colchetes duplos. A maneira preferida de fazer a substituição de comandos é com $() em vez de backticks.

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

Isso tudo presume que você esteja usando um shell como o Bash que suporta esses recursos. Se não, então isso deve funcionar:

if [ 'virsh list | grep MediaWiki' ]
    
por 13.09.2009 / 06:33
2

Você pode verificar o valor de retorno de grep -q se não precisar dos resultados do grep. Retorna 0 se algo corresponder.

if virsh list | grep -q MediaWiki
then
    echo "The MediaWiki VM is Running!"
else
    echo "Not Running!"
fi
    
por 13.09.2009 / 10:24
0

uma coisa a ter em mente é que, se o seu comando retornar null, ou "", você deseja usar o truque DOS antigo para comparar nulos:

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

Confira o guia de scripts

    
por 13.09.2009 / 06:57