Seu erro está aqui:
if [ DIR eq $1 ]
Você não está usando a variável, essa é a string simples DIR
. O que você quer é:
if [ "$DIR" = "$1" ]
No entanto, como você está configurando DIR="$1"
, esse teste sempre será verdadeiro por definição. Além disso, quando $1
estiver vazio, o comando $DIR
e find
serão executados no diretório atual. Para muitas versões de find
, esses comandos são equivalentes:
find . -name foo
find -name foo
Na ausência de um diretório de destino, find
pesquisará .
, o diretório atual. Então, uma versão funcional do seu script seria:
#!/bin/bash
## Avoid using UPPER CASE variable names in bash.
dir="$1"
## Check if $dir exists
if [ -e "$dir" ]
then
printf "total directories: %s\n" $(find "$dir" -type d | wc -l)
printf "total files: %s\n" $(find "$dir" -type f | wc -l)
else
echo " pass parameters"
fi
O número de argumentos passados para um script bash é salvo como $#
, então você também pode fazer
if [ $# -lt 1 ]
then
echo "pass parameters"
exit
fi