test if return true se o grep na saída tiver string em uma linha

4

Eu só quero retornar true ou false se um serviço estiver sendo executado. Aqui é onde eu estou, não tente primeiro ou por último, mas atual na escrita:

service iptables status | grep -qi "not running"

O sdtout para service iptables status quando está parado é iptables: Firewall is not running Quando eu executo o que eu criei não é nada em uma nova linha, o que eu acho que não é inesperado como 0 é verdadeiro e não-0 é falso. Então, preciso testar para garantir que funcione, mas não tenho certeza do que fazer. Aqui está a tentativa:

service iptables status | grep -qi "not running" || echo "stopped"

para quando o serviço for interrompido, esperava ver stopped , mas não consegui nada além de uma nova linha.

    
por jeremy.bass 11.01.2014 / 03:26

2 respostas

3
service iptables status | grep -qi "not running" && echo "stopped"

Você só precisa substituir || por && . Uma coisa confusa sobre scripts de shell é que 0 é verdadeiro e qualquer outro número é falso, oposto à maioria das outras linguagens. Isso ocorre porque os programas geralmente retornam um 0 para o sucesso.

Eu também preciso adicionar um 2>&1 após status como service em minhas saídas de distro para stderr, mas não parece um problema para você.

    
por 11.01.2014 / 03:32
1

Se grep não não visualizar uma correspondência, ele retornará um código diferente de zero. Um retorno de 0 significa que uma correspondência foi encontrada. Você provavelmente quer:

service iptables status | grep -qi 'not running' && echo 'Stopped'
    
por 11.01.2014 / 03:33

Tags