Pular para o conteúdo principal

Questão de Sistemas Operacionais — Scripts em Unix e Linux — FGV 2024

Sistemas OperacionaisScripts em Unix e Linux
Código
fg165632
Banca
FGV
Órgão
ALEP
Ano
2024
Cargo
Ana Leg ( )

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”

els

e 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á

  1. A0.
  2. B19.
  3. C85.
  4. D90.
  5. E100.
Revelar gabarito e comentário

GabaritoA — 0.

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”.

Resolução

Gabarito: letra A — a conta chega a 0 — alternativa A.

A ideia por trás

Um shell script é um arquivo de texto com comandos que o interpretador bash executa em sequência. Ele permite estruturas de decisão como o if, que testa uma condição e escolhe um caminho: se a condição for verdadeira, executa o bloco do then; se for falsa, executa o bloco do else. O comando test avalia comparações, e -lt significa 'menor que' e -gt 'maior que'.

O comando let faz aritmética e guarda o resultado numa variável: let Z=X*Y calcula o produto e atualiza Z. A variável Z é reutilizada: ela começa com o valor lido, depois pode ser sobrescrita pelo if. Por isso é preciso acompanhar o valor de Z a cada passo — o que era 85 no início pode virar outro número antes do segundo teste.

Esta questão cobra exatamente a execução passo a passo de um script com dois ifs encadeados: o primeiro decide se Z vira produto ou soma, e o segundo decide o que imprimir. O erro clássico é parar no primeiro if e esquecer que Z foi atualizado.

O que a questão dá

  • X = 10

  • Y = 9

  • Z = 85

  • script: primeiro if testa se Z < 80

  • script: segundo if testa se Z > 100

O que queremos: o valor que o script imprime na tela

Passo 1 — Ler os valores de X, Y e Z

O comando read X Y Z captura três números digitados e os guarda nas variáveis. É o ponto de partida: sem saber os valores iniciais, não há como simular o script.

X = 10, Y = 9, Z = 85

NÃO CAIA NESSA!

Trocar a ordem: achar que X=85, Y=10, Z=9. A ordem é exatamente a do read.

Passo 2 — Testar se Z é menor que 80

O primeiro if decide qual conta será feita. O teste test "$Z" -lt 80 pergunta: o valor atual de Z (85) é menor que 80? Como 85 não é menor, a condição é falsa.

Por que esta fórmula: O operador -lt é a abreviação de 'less than' (menor que). É a comparação que o script usa para escolher entre multiplicar ou somar.

Z<80Z < 80

De onde vem cada valor: ZZ = passo 1: 85 · 8080 = enunciado do script

85<80=falso85 < 80 = \boxed{\text{falso}}
NÃO CAIA NESSA!

Confundir -lt com -gt e achar que 85 é menor que 80.

Passo 3 — Executar o else: somar X e Y

Como a condição do passo 2 é falsa, o script pula o then e executa o else: let Z=X+Y. Isso atualiza Z de 85 para 19.

Por que esta fórmula: O comando let faz aritmética inteira e atribui o resultado à variável. Aqui, a soma é a operação escolhida pelo caminho falso do if.

Z=X+YZ = X + Y

De onde vem cada valor: XX = passo 1: 10 · YY = passo 1: 9

Z=10+9Z = 10 + 9
Z=19Z = \boxed{19}
NÃO CAIA NESSA!

Aplicar a multiplicação X*Y = 90, que só ocorreria se a condição fosse verdadeira.

Passo 4 — Testar se Z é maior que 100

O segundo if decide o que imprimir. Agora Z vale 19, não 85. O teste test "$Z" -gt 100 pergunta: 19 é maior que 100? Não, então a condição é falsa.

Por que esta fórmula: O operador -gt é 'greater than' (maior que). É a comparação que define se o script imprime o valor de Z ou o 0 do else.

Z>100Z > 100

De onde vem cada valor: ZZ = passo 3: 19 · 100100 = enunciado do script

19>100=falso19 > 100 = \boxed{\text{falso}}
NÃO CAIA NESSA!

Usar o Z original (85) em vez do atualizado (19) — 85 também não é maior que 100, mas o raciocínio errado pode levar a outro caminho.

Passo 5 — Executar o else e imprimir 0

Como a condição do passo 4 é falsa, o script executa o else do segundo if: echo "0". Esse é o comando que escreve na tela.

Por que esta fórmula: O comando echo exibe o texto entre aspas. Aqui, o texto é o número 0, que é a saída final do script.

0\boxed{0}
NÃO CAIA NESSA!

Achar que o script imprime o valor de Z (19) — mas o else do segundo if manda imprimir 0, não Z.

Resposta: 0 — alternativa A

Link permanente: /questoes/fg165632