Ich versuche, ein extrem einfaches Skript in Ubuntu zu schreiben, das es mir ermöglicht, entweder einen Dateinamen oder ein Verzeichnis zu übergeben und etwas Bestimmtes zu tun, wenn es sich um eine Datei handelt, und etwas anderes, wenn es sich um ein Verzeichnis handelt. Das Problem, das ich habe, ist, wenn der Verzeichnisname oder wahrscheinlich auch Dateien Leerzeichen oder andere Zeichen enthalten.
Hier ist mein Basiscode unten und ein paar Tests.
#!/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
Und hier ist die Ausgabe:
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
Alle diese Pfade sind gültig und existieren.
if
-else
Konstrukte in Bash unterstützen ebenfallselif
. Nur zur Info.