Questão nº 52

Questão de Tecnologia da Informação · FGV ALEP 2024 (nº 52)

FGV2024Analista Legislativo - Analista de RedeTecnologia da Informação
Gabarito: Aver comentário ↓

Seja o seguinte arquivo shell script gerado para uma máquina Linux

#! /bin/bash
# /usr/local/bin/let.bash
echo –n “Entre com X, Y e Z’’
read X Y Z
if test “$Z” –lt 80 then
let Z=X * Y
else
let Z=X+Y
fi
if test "$Z" -gt 100 then
echo “$Z”
else
echo “0”
fi

Se o valor de X for 10 , o de Y for 9 e o de Z for 85, então o resultado que irá aparecer será

Resposta comentada

Gabarito Alternativa A

Shell scripts são programas que executam comandos em sequência, usando estruturas condicionais (if) para tomar decisões. O comando test (ou [ ]) é fundamental para essas decisões, permitindo comparações numéricas (-lt para 'menor que', -gt para 'maior que') e de strings, e retornando sucesso (verdadeiro) ou falha (falso).

Vamos analisar o script passo a passo com os valores X=10, Y=9 e Z=85:

  1. read X Y Z: As variáveis são inicializadas com X=10, Y=9, Z=85.
  2. Primeiro if: if test “$Z” –lt 80 then
    • A pegadinha aqui é o operador –lt (com um traço longo, "en-dash"). O operador correto para "menor que" em test é -lt (com um hífen, "hyphen").
    • Quando o comando test encontra –lt, ele o interpreta como um argumento inválido ou uma string, e a condição test "85" –lt 80 falha, retornando um status de saída diferente de zero.
    • Em uma estrutura if, um status de saída diferente de zero significa que a condição é falsa.
    • Portanto, o bloco else do primeiro if é executado.
  3. Dentro do else do primeiro if: let Z=X+Y
    • Z é atualizado para 10 + 9, resultando em Z=19.
  4. Segundo if: if test "$Z" -gt 100 then
    • Agora Z é 19. A condição se torna test "19" -gt 100.
    • "19 é maior que 100?" A resposta é falsa.
    • Portanto, o bloco else do segundo if é executado.
  5. Dentro do else do segundo if: echo “0”
    • O script imprime 0.

(A) Correta: O script imprime 0. A primeira condição test "$Z" –lt 80 (com Z=85) é falsa devido ao uso incorreto do operador –lt (en-dash em vez de hífen), ou porque 85 não é menor que 80. Isso leva à execução de Z=X+Y, fazendo Z=19. A segunda condição test "$Z" -gt 100 (com Z=19) é falsa, pois 19 não é maior que 100, resultando na impressão de 0.
(B) Incorreta: 19 seria o valor de Z após a primeira estrutura if/else, mas o script continua e avalia a segunda condição, que não resulta na impressão de 19.
(C) Incorreta: 85 é o valor inicial de Z, mas ele é modificado pelo script.
(D) Incorreta: 90 seria o valor de Z se a primeira condição test "$Z" –lt 80 fosse verdadeira (o que não é o caso), levando a Z=X*Y (10*9=90). Mesmo se Z fosse 90, a segunda condição (90 > 100) ainda seria falsa, resultando em 0.
(E) Incorreta: 100 não é um valor que o script calcula ou imprime com os dados fornecidos.

Fonte: FGV ALEP 2024 Analista Legislativo - Analista de Rede (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho