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
.