Questão de Programação — Linguagens de programação — FGV 2024
Programação›Linguagens de programação
Código
fg086418
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Processamento de Alto Desempenho – PAD (HPC)
Certo programador deseja escrever em uma única linha de comandos um código em Bash que verifica se o valor digitado como entrada é negativo. Caso seja verdade, o código continua em execução, e solicita nova entrada, até que um valor maior ou igual a zero seja digitado.Nesse caso, é impresso na tela do terminal o número zero e a execução é encerrada. Considere que apenas números inteiros são dados como entrada.Assinale a opção que apresenta o comando em Bash que executa o desejado.
Awhile read n; do if [ n -lt 0 ]; then y=1; else y=0 && break; fi; done; echo y
Bwhile read $n; do if [ $n -lt 0 ]; then $y=1; else $y=0 && break; fi; done; echo $y
Cwhile read n; do if [ $n -lt 0 ]; then y=1; else y=0 && break; fi; done; echo $y
Dwhile read $n; do if ( $n -lt 0 ); then y=1; else y=0 && break; fi; done; echo $y
Ewhile read n; do if ( n -lt 0 ); then y=1; else y=0 && break; fi; done; echo y
Revelar gabarito e comentário▾
GabaritoC — while read n; do if [ $n -lt 0 ]; then y=1; else y=0 && break; fi; done; echo $y
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”.
Bash: laço de repetição com leitura e teste
Gabarito: letra C. O código deve ler números até que um valor não negativo seja digitado, então imprimir "0" e encerrar. A alternativa C é a única que utiliza corretamente a sintaxe do Bash: read n (sem $) para armazenar a entrada, [ $n -lt 0 ] (com $ na variável e colchetes) para o teste condicional, e echo $y (com $) para exibir o valor da variável.
Análise das alternativas:
Alternativa A — ❌ Incorreta
[ n -lt 0 ] usa n literal, não o valor lido. O correto é [ $n -lt 0 ].
echo y imprime o caractere "y", não o valor da variável y (que seria echo $y).
Alternativa B — ❌ Incorreta
read $n é inválido: read espera o nome da variável, não seu valor (expansão $n é executada antes do read, quebrando o comando).
$y=1 tenta executar o valor de y como comando, não faz atribuição.
Alternativa C — ✅ Correta
read n lê corretamente a entrada para a variável n.
[ $n -lt 0 ] testa se o valor de n é menor que zero.
Dentro do if: se negativo, y=1; caso contrário, y=0 e break.
Ao final, echo $y imprime "0" (valor de y). Atende perfeitamente ao enunciado.
Alternativa D — ❌ Incorreta
read $n → mesmo erro da B.
( $n -lt 0 ) usa parênteses em vez de colchetes. Em Bash, ( ... ) cria um subshell, não é o teste condicional correto; o adequado é [ $n -lt 0 ] ou (( $n < 0 )).
Alternativa E — ❌ Incorreta
( n -lt 0 ) → mesmo erro de sintaxe (parênteses ausentes de $).
echo y → imprime literal, não a variável.
NÃO CAIA NESSA!
A banca testa o domínio da sintaxe de variáveis no Bash: em read não se usa $, mas ao referenciar a variável é obrigatório $. Além disso, o teste aritmético exige colchetes [ ... ] (ou [[ ... ]] / (( ... ))), e o echo deve usar $ para expandir a variável. Confundir esses pontos leva aos erros das demais opções.