![O que há de errado com meu script de verificação de arquivos?](https://rvso.com/image/76407/O%20que%20h%C3%A1%20de%20errado%20com%20meu%20script%20de%20verifica%C3%A7%C3%A3o%20de%20arquivos%3F.png)
Não entendo por que a última parte do meu script não exibe nada quando nenhum arquivo ou diretório é encontrado.
echo -n "Please enter a filename or directory: "
read filename
if [ -z "$filename" ]; then
echo "You did not enter anything!"
exit 1
fi
if [ -e "$filename" ]; then
if [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
else
echo "You did not enter a valid file or directory."
fi
fi
exit
Não sei o que há de errado com meu código. Ele não exibirá o eco se um arquivo ou diretório inválido ou inexistente for inserido.
Responder1
Formatei novamente seu script para recuar as if
instruções. Isso deixou mais claro que o seu último echo
só acontece se -f
for verdadeiro e -d
falso. Se o usuário inserir um arquivo ou diretório que não existe, -f
falhará.
Considere esta revisão em sua última seção:
if [ -e "$filename" ]; then
if [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
fi
else
echo "You did not enter a valid file or directory."
fi
Onde a seção verdadeira da primeira if
instrução termina anteriormente (por else
); então, arquivos/diretórios que não existem têm uma seção de código para executar.
Responder2
Existem muitos outros tipos de arquivos que não causarão nenhuma saída neste código. Isso inclui links simbólicos, pipes nomeados, soquetes e arquivos especiais de blocos e caracteres. Notavelmente, /dev/tty
, /dev/stdin
e falham, sem serem detectados pelo código /dev/stdout
./dev/stderr
Você poderia modificar a lógica para levar em conta isso, no entanto, esta estrutura (estrutura de estilo de instrução case) é mais fácil de ler e menos propensa a erros:
if [ ! -e "$filename" ]; then
echo "$filename does not exist"
exit 1
elif [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
else
echo "$filename is not a regular file or directory."
exit 2
fi