Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Entendimento da lógica de execução

Boa tarde!

Estive acompanhando a aula sobre monitoramento de processos no Shell, e vi o professor escrever o seguinte código: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Durante a aula foi explicado que o operador ' %> ' redireciona para o arquivo seguinte (nesse caso em particular, o descarte do sistema) toda e qualquer saída do primeiro comando (que nesse caso é o ' pgrep '), inclusive os erros.

Com relação a isso, pergunto:

  • Por que não há necessidade de escrever a condição do fi dentro de colchetes acompanhando ' ; ' ?
  • Por que precisamos manter ' %> ' na condição? Já que com esse operador o código sempre é executado corretamente, não deveríamos cair sempre na condição verdadeira?
1 resposta
solução!

Olá, Lucas!

Vou esclarecer suas dúvidas sobre o script.

1. Por que não há necessidade de escrever a condição do fi dentro de colchetes acompanhando ;?

No Bash, a estrutura condicional if não exige que o fi seja seguido de colchetes ou ponto e vírgula. A sintaxe básica de um bloco if é:

if [ condição ]; then
    comandos
else
    outros_comandos
fi

No seu script, a condição está sendo verificada com a execução do comando pgrep nginx &> /dev/null. Se o comando pgrep nginx encontrar algum processo, ele retorna um status de saída 0 (verdadeiro), e o bloco then é executado. Caso contrário, o bloco else é executado. O fi simplesmente fecha o bloco if, sem necessidade de colchetes ou ponto e vírgula.

2. Por que precisamos manter &> /dev/null na condição?

O operador &> /dev/null redireciona tanto a saída padrão quanto a saída de erro do comando para o dispositivo de descarte (/dev/null). Isso é útil porque:

  • Limpeza da Saída: Evita que qualquer mensagem de saída ou erro seja exibida no terminal, mantendo a saída do script limpa.
  • Verificação Silenciosa: Permite que o comando pgrep nginx seja executado silenciosamente. O script apenas verifica o status de saída do comando sem exibir mensagens desnecessárias.

Sobre a Condição Verdadeira

Você mencionou que o código sempre deveria cair na condição verdadeira por causa do operador &>. Na verdade, o operador &> não altera o comportamento do comando pgrep nginx em termos de sucesso ou falha. Ele apenas redireciona a saída. O comando pgrep nginx ainda retornará 0 se encontrar processos do Nginx ou um valor diferente de 0 se não encontrar.

Portanto, a lógica do if continua válida. Se pgrep nginx encontrar processos, a condição é verdadeira e o bloco then é executado. Caso contrário, o bloco else é executado.

Bons estudos!