Questão de Programação — Linguagens de programação — Avança SP 2024
- Código
- qg078054
- Banca
- Avança SP
- Órgão
- CISBRA - SP
- Ano
- 2024
- Nível
- Superior
- Cargo
- Analista em T.I
- A| |
- B&
- C&&
- D;
- E!
GabaritoE — !
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.
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.
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.
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.
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.
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.
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 💪.
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