Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — Avança SP 2024

ProgramaçãoLinguagens de programação
Código
qg078054
Banca
Avança SP
Órgão
CISBRA - SP
Ano
2024
Nível
Superior
Cargo
Analista em T.I
Em programação de scripts shell, A list é uma sequência de um ou mais pipelines separados por operadores. São operadores válidos nesse parâmetro, exceto:
  1. A| |
  2. B&
  3. C&&
  4. D;
  5. E!
Revelar gabarito e comentário

GabaritoE — !

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Operadores de listas em shell script

Gabarito: letra E. Em shell script, uma list é uma sequência de um ou mais pipelines separados pelos operadores ;, &, && e ||. O operador ! não é um separador de pipelines — ele é o operador de negação lógica, usado para inverter o status de saída de um comando. É exatamente essa distinção que a alternativa correta explora.

Para entender a questão, é preciso dominar a gramática do shell. Uma pipeline é uma sequência de um ou mais comandos separados pelo caractere | (pipe), onde a saída de um comando alimenta a entrada do próximo. Uma list, por sua vez, é uma sequência de uma ou mais pipelines separadas por operadores de controle. Esses operadores definem como os comandos são executados e agrupados.

Os operadores de controle que separam pipelines em uma list são:

  • ; — separador sequencial: executa o comando anterior e, quando ele termina, executa o próximo, independentemente do status de saída.

  • & — executa o comando anterior em background (em segundo plano), permitindo que o shell continue imediatamente para o próximo comando.

  • && — AND lógico: executa o próximo comando somente se o anterior terminar com status de sucesso (0).

  • || — OR lógico: executa o próximo comando somente se o anterior terminar com status de falha (diferente de 0).

O operador ! não se encaixa nesse grupo. Ele é um operador de negação que pode ser usado no início de uma pipeline para inverter o status de saída do comando. Por exemplo, ! grep padrão arquivo retorna sucesso se o padrão não for encontrado. Ele não separa pipelines; ele modifica o resultado de uma única pipeline.

A pegadinha da banca está em apresentar ! como se fosse um operador de separação de lists, quando na verdade ele é um operador de negação. O candidato que confunde os dois conceitos acaba marcando a alternativa errada. Guarde a fronteira: separadores de list são ;, &, && e ||; ! é negação — é exatamente nela que as alternativas se dividem.

Alternativa A — ✅ Correta

O operador || é um separador válido de pipelines em uma list. Ele representa o OR lógico: o comando seguinte é executado apenas se o comando anterior falhar (status de saída diferente de zero). É um dos quatro operadores de controle que definem a estrutura de uma list.

Alternativa B — ✅ Correta

O operador & é um separador válido de pipelines em uma list. Ele executa o comando anterior em background, ou seja, em segundo plano, e o shell prossegue imediatamente para o próximo comando sem esperar a conclusão do anterior. É um operador de controle fundamental para scripts que precisam executar tarefas concorrentes.

Alternativa C — ✅ Correta

O operador && é um separador válido de pipelines em uma list. Ele representa o AND lógico: o comando seguinte é executado apenas se o comando anterior terminar com sucesso (status de saída 0). É amplamente utilizado para encadear comandos que dependem do sucesso do anterior.

Alternativa D — ✅ Correta

O operador ; é um separador válido de pipelines em uma list. Ele executa o comando anterior e, quando este termina, executa o próximo, independentemente do status de saída. É o separador sequencial mais básico e comum em scripts shell.

Alternativa E — ❌ Incorreta ⟵ GABARITO

O operador ! não é um separador de pipelines em uma list. Ele é o operador de negação lógica, utilizado para inverter o status de saída de um comando ou pipeline. Por exemplo, ! comando retorna sucesso se comando falhar, e vice-versa. Como a banca pediu o operador que não é válido como separador, a resposta correta é a letra E.

NÃO CAIA NESSA!

A banca explora a confusão entre operadores de controle (que separam pipelines em uma list) e o operador de negação !. O candidato que não domina a gramática do shell pode achar que ! também é um separador, mas ele atua sobre o status de saída de um único comando, não na estrutura da list. Com treino, você enxerga essa diferença de longe 💪.

PEGA ESSA DICA!

Para memorizar os separadores de list em shell, lembre-se do conjunto ;, &, &&, ||. Eles são os únicos operadores que controlam a execução sequencial, paralela ou condicional entre pipelines. O ! fica de fora porque sua função é inverter o resultado de um comando, não conectar comandos.

Gabarito: letra E

Link permanente: /questoes/qg078054