Questão de Sistemas Operacionais — Scripts em Unix e Linux — CESPE / CEBRASPE 2024
Sistemas Operacionais›Scripts em Unix e Linux
Código
ce404123
Banca
CESPE / CEBRASPE
Órgão
CNJ
Ano
2024
Cargo
AJ
Acerca de linguagens de script, julgue o próximo item.
Considere o seguinte shell script.
Considere o seguinte shell script.
#!/bin/bash N=6 a=0 b=1 for (( i=0; i<N; i++ )) do echo -n “$ a “ c=$ ((a + b)) a=$ b b=$ c done
O resultado da execução desse script é o apresentado a seguir.
1 1 2 3 5 8
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoE — Errado
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”.
Shell Script: Sequência de Fibonacci e Sintaxe de Variáveis
Gabarito: letra E (ERRADO). O script, como escrito, não produz a saída 1 1 2 3 5 8 porque contém erros de sintaxe na expansão de variáveis e na aritmética. A forma correta de referenciar uma variável em shell script é $a (sem espaço entre o $ e o nome), e a aritmética deve ser feita com $((a + b)) (sem espaços entre os $ e os parênteses). Além disso, mesmo que a sintaxe estivesse correta, a saída seria 0 1 1 2 3 5, pois a inicia em 0.
O shell script é uma linguagem de programação interpretada, executada pelo interpretador de comandos (shell) do sistema operacional. No Linux, o Bash (Bourne-Again SHell) é o shell padrão na maioria das distribuições, como descrito no contexto. Ele permite a criação de scripts com estruturas de controle, variáveis e funções. A sintaxe correta é fundamental para o funcionamento do script, e é exatamente nesse ponto que a questão se concentra.
A lógica do algoritmo apresentado é a da sequência de Fibonacci, onde cada número é a soma dos dois anteriores. O script inicializa a=0 e b=1, e em cada iteração imprime a, calcula c como a soma de a e b, e atualiza a para b e b para c. Se a sintaxe estivesse correta, a saída seria 0 1 1 2 3 5 (pois a começa em 0). Para obter 1 1 2 3 5 8, seria necessário inicializar a=1 e b=1, ou ajustar a lógica.
No entanto, o script contém erros de sintaxe que impedem sua execução correta. Vamos analisar cada linha problemática:
echo -n “$ a “: A forma correta de imprimir o valor da variável a é echo -n "$a ". O espaço entre $ e a faz com que o shell interprete $ como uma variável vazia (ou literal), e a como texto comum. O resultado seria a (com espaço antes do a), não o valor de a.
c=$ ((a + b)): A forma correta de realizar aritmética é c=$((a + b)). O espaço entre $ e (( faz com que o shell interprete $ como uma variável vazia e ((a + b)) como um comando, o que causaria um erro de sintaxe.
a=$ b: A forma correta é a=$b. O espaço entre $ e b faz com que o shell interprete $ como uma variável vazia e b como um comando, o que causaria um erro.
b=$ c: A forma correta é b=$c. O mesmo problema do item anterior.
Portanto, o script não executaria corretamente, e a saída apresentada no enunciado (1 1 2 3 5 8) não seria produzida. A afirmação está incorreta.
Item — ❌ Errado
A afirmação de que o resultado da execução do script é 1 1 2 3 5 8 está incorreta por dois motivos:
Erros de sintaxe: As linhas echo -n “$ a “, c=$ ((a + b)), a=$ b e b=$ c contêm espaços indevidos entre o $ e o nome da variável ou entre $ e ((. Isso impede a execução correta do script, pois o shell não reconhece a expansão de variável nem a aritmética.
Lógica da sequência: Mesmo que a sintaxe fosse corrigida, a saída seria 0 1 1 2 3 5, pois a é inicializado com 0. Para obter 1 1 2 3 5 8, seria necessário inicializar a=1 e b=1, ou ajustar a lógica para imprimir b antes de atualizar as variáveis.
A banca explora a confusão entre a sintaxe correta de expansão de variáveis ($a) e a forma incorreta com espaço ($ a). Além disso, o candidato pode não perceber que a sequência de Fibonacci começa com 0, não com 1. Fique atento: em shell script, não há espaço entre $ e o nome da variável, nem entre $ e (( na aritmética.
PEGA ESSA DICA!
Para resolver questões de shell script, revise a sintaxe básica: $var para expansão, $((expr)) para aritmética, e $(cmd) para substituição de comando. Pratique com exemplos simples para fixar.