#!/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 é
Acontar o número de arquivos regulares no caminho especificado e exibir seu total.
Bcontar o número de diretórios no caminho especificado e exibir seu total.
Cexibir a lista de todos os arquivos no diretório especificado.
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.