Outro problema é que você (corretamente) cita a variável quando a testa com -d
, mas não consegue citá-la no loop for
.
Em vez de:
for i in $chosen_dir/*;
do
Uso:
for f in "$chosen_dir"/*; do
(A mudança de nome e a mudança de espaço em branco são pontos de estilo; as aspas duplas adicionadas são importantes.)
Eu não sei o que você está tentando usar o contador, porque você nunca realmente usou. Nem você referiu $i
( $f
na minha versão) que, com base na construção for
acima, conterá o nome de cada arquivo (ou subdiretório) em "$chosen_dir"
, por sua vez.
A propósito, obrigado por especificar que esta é a lição de casa. Poderia haver soluções muito mais curtas, mas sua abordagem geral é válida se você corrigir os erros de sintaxe e também citar suas variáveis .
Para a contagem de arquivos em um subdiretório, você pode não obter uma contagem precisa com o comando que está usando. (Na verdade, você nunca obterá uma contagem precisa com o comando: ls "$chosen_dir" | wc -l
porque você não está testando o subdiretório, está testando o diretório digitado pelo usuário.) Em vez de apenas ls
, você pode considerar usar ls -1 -A "$i"
para que a contagem de linhas forneça uma contagem precisa dos arquivos dentro do subdiretório. (Consulte man ls
para detalhes sobre os sinalizadores -1
e -A
.)
Isso ainda não irá lidar corretamente com nomes de arquivos que contenham novas linhas, mas para trabalhos de casa eu altamente altamente duvido que você consiga pontos para isso. (Muitos scripts realmente usados na produção também falham em nomes de arquivos que contêm novas linhas; esses nomes vêm apenas de usuários maliciosos.)
Eu assumo que você pode trabalhar a parte C por conta própria. ;) (Veja man sort
se você precisar, e procure a tag sort
neste site também.)