Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

IF neste caso não funcinou com a sintaxe padrão

Ola boa tarde, fiz o teste na minha maquina com a verificação do if com colchetes e um (;) conforme a sintaxe padrão do comando. Porem este comando do pgrep &> /dev/null não funcionou apenas fazendo igual a do vídeo deu certo, sem colchete ou (;) tem alguma explicação para isso? e quando devo usar o if sem os colchetes e ;?

Obrigado!

2 respostas
solução!

Olá, Juliano!

Entendo a sua dúvida sobre o uso do if com colchetes e ponto e vírgula. No Linux, a sintaxe do if pode variar dependendo do que você está verificando. Quando você usa pgrep &> /dev/null, está redirecionando tanto a saída padrão quanto a saída de erro para o "lixo", ou seja, nada será exibido no terminal.

A diferença que você observou pode estar relacionada ao contexto em que o if está sendo usado. Quando você utiliza if sem colchetes e ponto e vírgula, como no exemplo do vídeo, é provável que o comando pgrep esteja sendo usado diretamente para verificar a existência de processos, e o redirecionamento &> /dev/null está sendo utilizado para suprimir qualquer saída, seja de sucesso ou erro.

Aqui está um exemplo prático para ilustrar:

if pgrep nginx &> /dev/null
then
    echo "Nginx está em execução"
else
    echo "Nginx não está em execução"
fi

Nesse caso, o pgrep nginx &> /dev/null é usado para verificar se o processo nginx está em execução. Se estiver, a condição será verdadeira e o script imprimirá que o Nginx está em execução. Caso contrário, ele imprimirá que o Nginx não está em execução.

Os colchetes são geralmente usados para expressões condicionais, como comparações de números ou strings, e não são necessários quando você está apenas verificando o resultado de um comando como pgrep.

Bons estudos!

Eu tive o mesmo problema. O que eu notei é que o resultado ocorre corretamente se rodarmos, seja a estrutura do if ou test, na linha de comando, mas não via script. Por alguma razão, após edição, o script só percebe o primeiro resultado obtido. "... é possível que o script esteja usando um ambiente de execução ou contexto de processos diferente do seu terminal interativo. Esse tipo de problema é comum se o script estiver em execução em um shell que guarda estados anteriores de variáveis ou de cache de processos", segundo o chatGPT. A solução que eu encontrei foi esta:

TEMPO="$(date +"%Y-%m-%d às %H:%M:%S") UTC"

if systemctl is-active --quiet nginx; then
        echo "Nginx, status em $TEMPO: Operacional"
else
        echo "Nginx, status em $TEMPO: Desativado"
fi

Atrelei a condição diretamente ao systemctl que informa o que está ocorrendo no instante.