Sua chamada de função está errada:
Pdir($i) # this is wrong
No Bash, você chama funções assim como invocaria executáveis binários, escrevendo seu nome como comando e colocando todos os argumentos por trás, separados por espaços e não entre colchetes:
Pdir $i # this is correct, but not good
Note que você deve quase sempre colocar as variáveis entre aspas duplas, para evitar que elas sejam divididas e interpretadas como múltiplos argumentos se contiverem espaços, então a melhor maneira de escrevê-las seria:
Pdir "$i" # this is how you do it
Outro pequeno erro é que você precisa de um espaço entre o teste if
e o teste [
.
Você também deve citar a variável novamente e é recomendável usar a sintaxe de substituição de comando $(...)
mais moderna em vez de '...'
. Observe que as aspas duplas dentro de chaves de substituição de comandos são permitidas mesmo se a substituição em si estiver entre aspas duplas.
if [ "$(stat -c %F "${a[$i]}")" = "directory" ]
E, em vez de interpretar a saída de ls
( Por que não analisam ls
? ), é melhor obter uma matriz de arquivos e diretórios no diretório atual, por exemplo usando um glob de shell :
a=(*)
Observe que, por padrão, isso retorna apenas arquivos não ocultos, isto é, tudo que não inicia com um ponto. Para também listar arquivos e diretórios ocultos, ative a opção dotglob
shell dentro do seu script uma vez primeiro:
shopt -s dotglob
a=(*)