Acho que [ -f … ] (ou test -f … ) requer exatamente um argumento. Quando você corre
./filedirarg.sh /var/logs fileordir.sh
existem dois. O mesmo com [ -d … ] .
Esta é uma solução rápida:
#! /bin/bash
echo "Running file or directory evaluation script"
for file ; do
if [ -f "$file" ]
then
echo "The entry '$file' is a file"
elif [ -d "$file" ]
then
echo "The entry '$file' is a directory"
fi
done
Graças a citações, ele deve funcionar com nomes com espaços (por exemplo, ./filedirarg.sh "file name with spaces" ).
Observe também que for file ; do é equivalente a for file in "$@" ; do .