Questão de Sistemas Operacionais — Scripts em Unix e Linux — VUNESP 2024
Sistemas Operacionais›Scripts em Unix e Linux
Código
vu212380
Banca
VUNESP
Órgão
CM Campinas
Ano
2024
Cargo
Ana Leg ( )
No sistema operacional Linux, o seguinte shell script para bash verifica se alguns servidores na rede estão ativos por meio do comando ping.
#!/bin/bash
for i in 0{1..4}
do
h= srv${i}
ping -c 1 -q $h &>/dev/null
if [ $? -eq 0 ]
then
echo servidor $h respondeu
else
echo servidor $h nao respondeu.
fi
done
Com base no código apresentado, os nomes dos servidores que são testados durante a execução do script são exclusivamente:
Asrv01, srv02, srv03 e srv04.
Bsrv01 e srv04.
Csrv0, srv1 e srv4.
Dsrv0, srv1, srv2, srv3 e srv4.
Esrv1, srv2, srv3 e srv4.
Revelar gabarito e comentário▾
GabaritoA — srv01, srv02, srv03 e srv04.
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 e Expansão de Chaves no Bash
Gabarito: letra A. O loop for i in 0{1..4} gera os valores 01, 02, 03 e 04 — a expansão de chaves {1..4} produz a sequência 1 2 3 4, e o prefixo 0 é concatenado a cada elemento. Assim, os servidores testados são exclusivamente srv01, srv02, srv03 e srv04.
O coração da questão é a expansão de chaves (brace expansion), um recurso do Bash que gera uma lista de strings a partir de um padrão entre chaves {}. Quando você escreve {1..4}, o shell expande isso para 1 2 3 4 — uma sequência numérica crescente. O prefixo 0 antes das chaves é apenas um texto literal que se junta a cada elemento expandido, resultando em 01 02 03 04. É por isso que o nome do servidor fica srv01, com zero à esquerda, e não srv1.
Esse mecanismo é diferente da expansão de variáveis ($i) ou da expansão aritmética ($((i+1))). Na expansão de chaves, o shell interpreta o padrão {início..fim} e gera todos os valores intermediários — não é uma iteração numérica como em outras linguagens, mas uma geração de strings. O comando for i in 0{1..4} simplesmente percorre a lista já expandida: 01, 02, 03, 04.
Na prática, o script monta o nome do host com h=srv${i}. Para cada valor de i, o nome vira srv01, srv02, srv03 e srv04. O comando ping -c 1 -q $h envia um único pacote ICMP de forma silenciosa, e o if [ $? -eq 0 ] verifica se o comando anterior teve sucesso (código de saída 0), indicando que o servidor respondeu. O &>/dev/null descarta toda a saída, tanto padrão quanto de erro.
A pegadinha que a banca explora aqui é justamente a expansão de chaves com prefixo zero. Muitos candidatos leem 0{1..4} como se fosse {01..04} ou interpretam como uma iteração de 1 a 4 sem o zero, caindo na alternativa E (srv1, srv2, srv3, srv4). Outros podem pensar que o 0 é um separador ou que a expansão inclui o 0 isolado, gerando srv0 — o que não ocorre, pois o 0 é prefixo fixo, não um valor da sequência.
Guarde a distinção: {1..4} gera 1 2 3 4; 0{1..4} gera 01 02 03 04; {01..04} também geraria 01 02 03 04 (com zero à esquerda por causa do formato), mas a sintaxe do script usa o prefixo. É exatamente essa nuance que separa as alternativas.
10{1..4}
201 02 03 04
3srv01…srv04
LEVEL · soulevel.com.br
Alternativa A — ✅ Correta ⟵ GABARITO
A expansão 0{1..4} produz exatamente 01, 02, 03 e 04. O prefixo 0 é concatenado a cada número da sequência {1..4}, resultando nos nomes srv01, srv02, srv03 e srv04. Não há srv00 nem srv05 — a sequência vai de 1 a 4, e o zero é apenas o dígito que preenche a dezena.
Alternativa B — ❌ Incorreta
Afirma que apenas srv01 e srv04 são testados. Isso ignoraria os servidores srv02 e srv03, que também são gerados pela expansão {1..4}. A sequência completa inclui todos os valores intermediários, não apenas os extremos.
Alternativa C — ❌ Incorreta
Lista srv0, srv1 e srv4. Aqui há dois erros: primeiro, o 0 não é um valor da sequência — é um prefixo fixo; segundo, a expansão {1..4} gera todos os números de 1 a 4, não apenas 1 e 4. O nome srv0 jamais seria formado, pois o 0 não aparece como elemento isolado da expansão.
Alternativa D — ❌ Incorreta
Inclui srv0 na lista, o que está errado. O 0 é o prefixo concatenado a cada valor da sequência, não um valor em si. A expansão 0{1..4} não produz srv0 — produz srv01, srv02, srv03 e srv04.
Alternativa E — ❌ Incorreta
Lista srv1, srv2, srv3 e srv4, sem o zero à esquerda. Isso seria o resultado de srv{1..4} (sem o prefixo 0). No script, o prefixo 0 está presente, então os nomes corretos são srv01, srv02, srv03 e srv04. A banca explora exatamente essa confusão entre srv{1..4} e 0{1..4}.
NÃO CAIA NESSA!
A banca troca a expansão com prefixo zero (0{1..4} → 01 02 03 04) pela expansão sem prefixo ({1..4} → 1 2 3 4). O candidato que lê rápido enxerga srv1, srv2, srv3, srv4 e marca a letra E, mas o 0 antes das chaves é um caractere literal que se junta a cada número. Fique atento: o prefixo não é um valor da sequência, é parte do nome.
PEGA ESSA DICA!
Para não errar, teste mentalmente a expansão: escreva echo 0{1..4} no terminal e veja a saída 01 02 03 04. Sempre que vir {a..b}, lembre-se de que o shell gera todos os valores entre a e b — e qualquer texto antes das chaves é concatenado a cada um deles. Na prova, se a alternativa não tiver o zero à esquerda, ela está descrevendo outra expansão.
Gabarito: letra A — os servidores testados são srv01, srv02, srv03 e srv04.