Um zu prüfen, ob ein Verzeichnis in einem Shell-Skript existiert, können Sie Folgendes verwenden:
if [ -d "$DIRECTORY" ]; then
# Control will enter here if $DIRECTORY exists.
fi
Oder um zu prüfen, ob ein Verzeichnis nicht existiert:
if [ ! -d "$DIRECTORY" ]; then
# Control will enter here if $DIRECTORY doesn't exist.
fi
Da jedoch Jon Ericson weist darauf hin, dass nachfolgende Befehle möglicherweise nicht wie vorgesehen funktionieren, wenn Sie nicht berücksichtigen, dass ein symbolischer Link auf ein Verzeichnis diese Prüfung ebenfalls besteht. Wenn Sie z.B. dies ausführen:
ln -s "$ACTUAL_DIR" "$SYMLINK"
if [ -d "$SYMLINK" ]; then
rmdir "$SYMLINK"
fi
Die Fehlermeldung wird angezeigt:
rmdir: failed to remove `symlink': Not a directory
Daher müssen symbolische Links möglicherweise anders behandelt werden, wenn nachfolgende Befehle Verzeichnisse erwarten:
if [ -d "$LINK_OR_DIR" ]; then
if [ -L "$LINK_OR_DIR" ]; then
# It is a symlink!
# Symbolic link specific commands go here.
rm "$LINK_OR_DIR"
else
# It's a directory!
# Directory command goes here.
rmdir "$LINK_OR_DIR"
fi
fi
Achten Sie besonders auf die doppelten Anführungszeichen, in die die Variablen eingeschlossen sind. Der Grund dafür wird von 8jean erklärt in einer anderen Antwort .
Wenn die Variablen Leerzeichen oder andere ungewöhnliche Zeichen enthalten, wird das Skript wahrscheinlich fehlschlagen.