Questão de Sistemas Operacionais — Scripts em Unix e Linux — FGV 2024
Sistemas Operacionais›Scripts 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á
A0.
B19.
C85.
D90.
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.
De onde vem cada valor: = passo 1: 85 · = enunciado do script
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.
De onde vem cada valor: = passo 1: 10 · = passo 1: 9
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.
De onde vem cada valor: = passo 3: 19 · = enunciado do script
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.
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.