Pular para o conteúdo principal

Questão de Sistemas Operacionais — Geral — CESPE / CEBRASPE 2024

Sistemas OperacionaisGeral
Código
ce404147
Banca
CESPE / CEBRASPE
Órgão
SEBRAE
Ano
2024
Cargo
Ana Tec II ( )

#!/bin/bash
count=0
for file in /path/to/directory/*; do
    if [ -f "$ file" ]; then
        ((count++))
    fi
done
echo "Total files: $count"

 

O objetivo principal desse script Shell é

  1. Acontar o número de arquivos regulares no caminho especificado e exibir seu total.
  2. Bcontar o número de diretórios no caminho especificado e exibir seu total.
  3. Cexibir a lista de todos os arquivos no diretório especificado.
  4. Dcontar o número de arquivos e diretórios no caminho especificado e exibir seu total.
Revelar gabarito e comentário

GabaritoA — contar o número de arquivos regulares no caminho especificado e exibir seu total.

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: contagem de arquivos regulares

Gabarito: letra A. O script percorre todos os itens do diretório /path/to/directory/ e, para cada um, verifica se é um arquivo regular com o teste -f; se for, incrementa o contador. Ao final, exibe o total. O objetivo é exatamente o descrito na alternativa A: contar arquivos regulares e mostrar o total.

O script usa três elementos centrais do Shell/Bash: o laço for, o teste condicional -f e a expansão de glob *. Vamos entender cada um para fixar o raciocínio.

O laço for file in /path/to/directory/* itera sobre todos os itens (arquivos, diretórios, links simbólicos, etc.) que correspondem ao padrão * dentro do diretório. O * é um caractere curinga (glob) que o shell expande para a lista de nomes de todos os itens do diretório — exceto os ocultos (que começam com .).

Dentro do laço, a condição if [ -f "$file" ] usa o operador de teste -f, que retorna verdadeiro somente se o item for um arquivo regular (um arquivo comum, não um diretório, não um link simbólico, não um dispositivo, etc.). Se a condição for verdadeira, o comando ((count++)) incrementa a variável count em 1. Ao final, echo "Total files: $count" exibe o valor acumulado.

A pegadinha clássica desta questão é confundir o teste -f com outros testes de arquivo. O -f é específico para arquivos regulares; para diretórios, o teste correto seria -d. A banca explora exatamente essa troca nas alternativas B e D.

Guarde a distinção entre os principais operadores de teste de arquivo do Shell, pois é nela que as alternativas se dividem:

Operador

Verdadeiro se o item for...

-f

arquivo regular

-d

diretório

-e

existente (qualquer tipo)

-L

link simbólico

-r

legível

-w

gravável

-x

executável

Alternativa A — ✅ Correta ⟵ GABARITO

O script conta apenas os itens que passam no teste -f, ou seja, arquivos regulares. O laço percorre todos os itens do diretório, mas o if filtra: só incrementa count quando o item é um arquivo regular. Ao final, echo exibe o total. É exatamente o que a alternativa descreve: contar arquivos regulares no caminho especificado e exibir o total.

Alternativa B — ❌ Incorreta

A alternativa troca o teste: para contar diretórios, o script usaria -d, não -f. O operador -f retorna verdadeiro apenas para arquivos regulares; diretórios falham nesse teste e não são contados. Portanto, o script não conta diretórios.

Alternativa C — ❌ Incorreta

O script não exibe a lista de arquivos; ele apenas incrementa um contador e exibe o total. Para listar os arquivos, seria necessário um comando como ls ou echo "$file" dentro do laço. O echo final mostra apenas o número, não os nomes.

Alternativa D — ❌ Incorreta

O script conta apenas arquivos regulares (-f), não arquivos e diretórios. Para contar ambos, o teste seria -e (existência) ou simplesmente incrementar sem condição. Como há o filtro -f, diretórios são excluídos da contagem.

NÃO CAIA NESSA!

A banca explora a confusão entre os operadores de teste -f (arquivo regular) e -d (diretório). O candidato que lê o script rapidamente pode achar que ele conta tudo do diretório, mas o if [ -f "$file" ] filtra apenas arquivos regulares. Fique atento: -f é arquivo, -d é diretório — essa distinção é o coração da questão.

PEGA ESSA DICA!

Na prova, ao ver um script com [ -f ... ], pergunte-se: "o que o -f testa?" — arquivo regular. Se a alternativa falar em diretórios, links ou listagem, ela está errada. Memorize os operadores de teste mais comuns (-f, -d, -e, -L) e associe cada um ao tipo de item que ele valida.

Gabarito: letra A

Link permanente: /questoes/ce404147