Variável não incrementada em loop

0

Estou tentando imprimir o número de diretórios no diretório de trabalho. Por alguma razão, meu contador não está incrementando. Você pode por favor me dizer por quê?

#!/bin/bash
n=0
for afile in $(ls)
do
    if [ -d $afile ]
    then
      (( n ++ ))
    fi
done
echo There are $n directories under the current directory $(pwd).
exit 0

Estranhamente, este programa parece iterar através de ls .. (diretório up)

for myfile in $(ls ..)
do
    if [ -d "../$myfile" ]
    then
      echo "../$myfile (dir)"
    else
      echo ../$myfile
    fi
done
exit 0
    
por Benjamin 02.03.2018 / 01:35

1 resposta

0

Seu código funciona bem para mim, mas há alguns erros que falharão em alguns casos (por exemplo, se um nome de arquivo tiver um espaço).

  • Em primeiro lugar, não analise ls . Em vez disso, iterar usando um glob. ou seja, em vez de $(ls) , use * .
  • Ao ler variáveis, você deve citá-las, ou seja, usar "$foo" em vez de $foo . Se você não os citar, o shell dividirá a saída no IFS (ou seja, os espaços). Você pode testar isso com seu script. Inclua alguns diretórios sem espaços e teste com um espaço. Apenas o primeiro será contado.

Aqui está o código fixo:

#!/bin/bash
n=0
for afile in *
do
    if [ -d "$afile" ]
    then
      (( n ++ ))
    fi
done
echo There are $n directories under the current directory $(pwd).
exit 0

Não tenho certeza se isso é óbvio, mas o script será executado no diretório atual.

    
por 02.03.2018 / 01:51