Я намагаюся написати надзвичайно простий скрипт в Ubuntu, який би дозволив мені передавати йому або ім’я файлу, або каталог, і я можу зробити щось конкретне, коли це файл, і щось інше, коли це каталог. Проблема, яку я маю, полягає в тому, що в імені каталогів, або, ймовірно, також файлів, є пробіли або інші імена, які можна швидко скачати.
Ось мій основний код нижче, і кілька тестів.
#!/bin/bash
PASSED=$1
if [ -d "${PASSED}" ] ; then
echo "$PASSED is a directory";
else
if [ -f "${PASSED}" ]; then
echo "${PASSED} is a file";
else
echo "${PASSED} is not valid";
exit 1
fi
fi
І ось результат:
andy@server~ $ ./scripts/testmove.sh /home/andy/
/home/andy/ is a directory
andy@server~ $ ./scripts/testmove.sh /home/andy/blah.txt
/home/andy/blah.txt is a file
andy@server~ $ ./scripts/testmove.sh /home/andy/blah\ with\ a\ space.txt
/home/andy/blah with a space.txt is not valid
andy@server~ $ ./scripts/testmove.sh /home/andy\ with\ a\ space/
/home/andy with a space/ is not valid
Усі ці шляхи є дійсними та існують.
if-elseконструкції в Bash також підтримуютьelif. Просто FYI.