Questão nº 52
Questão de Tecnologia da Informação · FGV ALEP 2024 (nº 52)
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á
- A0. (alternativa correta)
- B19.
- C85.
- D90.
- E100.
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:
read X Y Z: As variáveis são inicializadas comX=10,Y=9,Z=85.- 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" emtesté-lt(com um hífen, "hyphen"). - Quando o comando
testencontra–lt, ele o interpreta como um argumento inválido ou uma string, e a condiçãotest "85" –lt 80falha, 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
elsedo primeiroifé executado.
- A pegadinha aqui é o operador
- Dentro do
elsedo primeiroif:let Z=X+YZé atualizado para10 + 9, resultando emZ=19.
- Segundo
if:if test "$Z" -gt 100 then- Agora
Zé19. A condição se tornatest "19" -gt 100. - "19 é maior que 100?" A resposta é falsa.
- Portanto, o bloco
elsedo segundoifé executado.
- Agora
- Dentro do
elsedo segundoif:echo “0”- O script imprime
0.
- O script imprime
(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.