Verzeichnis auf Vorhandensein prüfen

Hallo,

ich als Shell-Script-DAU möchte eine für Profis sicherlich einfach zu lösende Frage stellen: auf einem AIX- bzw. Solaris-System (gerne auch für Linux geeignet) möchte ich ein Verzeichnis auf Vorhandensein prüfen. Wenn es da ist möchte ich es löschen, wenn es nicht da ist will ich auch nichts machen, sondern im Script weitergehen.

Vielen Danke für die Hilfe!

Gruß,

Klaus

Wenn es da ist möchte
ich es löschen, wenn es nicht da ist will ich auch nichts
machen, sondern im Script weitergehen.

#!/bin/bash
echo "script starts."

FOLDER="meinOrdner"
if [-d "$FOLDER"]; then
 /bin/rm -rf "$FOLDER"
fi

echo "script now does other unbelievable things."

Guckst du hier: http://tldp.org/LDP/abs/html/fto.html

Gruß,
Stefan

Hallo Stefan,

Danke! Funktioniert. Aber du weisst ja, reich den kleinen Finger und sie wollen den ganzen Arm :wink: Daher noch eine kleine Zusatzfrage: wenn das Verzeichnis NICHT exisitert will ich es anlegen - wie bekomme ich das hin?

Vorab vielen Dank!

Gruß,

Klaus

Hi Klaus,

im obigen Beispiel ist die Abfrage, ob das Verzeichnis da ist, vollkommen überflüssig.

rm -rf dir

macht von sich aus nichts, wenn dir nicht vorhanden ist, anderenfalls löscht es rekursiv „dir“ (deshalb dort die -f = force Option).

Ein Verzeichnis legt man mit
mkdir dir
an.

Gruss
norsemanna

Hallo,

Daher noch eine kleine Zusatzfrage: wenn das Verzeichnis NICHT exisitert will ich es anlegen - wie bekomme ich das hin?

if [! -d "$FOLDER"]; then

Ein gutgemeinter Rat: RTFM, z.B. hier http://www.gnu.org/software/bash/manual/bashref.html

Grüße
Rainer

Abfrage des Rückgabewertes von ‚test‘ $?
Hi,

im obigen Beispiel ist die Abfrage, ob das Verzeichnis da ist,
vollkommen überflüssig.

Nö. Denn wenn „test“ mit [-d …] „wahr“ ist soll das Verzeichnis zwar gelöscht, aber nicht angelegt werden. So ist zumindest der Text des Fragers.
Was fehlt ist die Abfrage des Rückgabewertes von „test“ $?

VG,
J~

Moin,

Wenn es da ist möchte
ich es löschen, wenn es nicht da ist will ich auch nichts
machen, sondern im Script weitergehen.

es anlegen.

Du kannst den Rückgabewert von „test“ [-d „$FOLDER“] also $? hernehmen oder mit else sollte es noch einfacher gehen.
Meine Idee:

#!/bin/bash
echo "script starts."

FOLDER="meinOrdner"
if [-d "$FOLDER"]; then
 /bin/rm -rf "$FOLDER"
else mkdir "$FOLDER"
fi

echo "script now does other unbelievable things."

Wenn es übrigens eine (reguläre) DATEI namens „meinOrdner“ gibt bricht mkdir natürlich ab. Muss man also vorher auch noch abtesten.

VG
J~

Hallo,

Was fehlt ist die Abfrage des Rückgabewertes von „test“ $?

Mit

 if [-d xxx];then ...;else ...;fi

wird doch genau dieses gemacht. Oder ist mir da etwas entgangen?

Gruß
R.

Hi,

if [-d xxx];then …;else …;fi

wird doch genau dieses gemacht. Oder ist mir da etwas
entgangen?

hmm, ich weiß nicht, ob man das auch als Rückgabewert bezeichnet wenn die test-Anweisung so wie oben benutzt wird.
Was ich meinte war, dass ja das Verzeichnis erstellt werden sollte wenn es vorher nicht existierte. Und [-d xxx] liefert ja einen Rückgabewert je nachdem ob es ein Verzeichnis gab oder eben nicht.

VG
J~

Hallo,

if [-d xxx];then …;else …;fi

wird doch genau dieses gemacht. Oder ist mir da etwas
entgangen?

hmm, ich weiß nicht, ob man das auch als Rückgabewert
bezeichnet wenn die test-Anweisung so wie oben benutzt wird.

„man bash“ beschreibt die if-Anweisung so: Die if-Liste (der Ausdruck zwischen if und then) wird ausgeführt. Wenn der Rückgabewert 0 ist, dann wird die then-Liste ausgeführt. Andernfalls wird die else-Liste ausgeführt.

Gruß
Rainer

Hi,

also lesen kann ich noch

Wenn es da ist möchte ich es löschen, wenn es nicht da ist will ich
auch nichts machen, sondern im Script weitergehen.

das war der O-Ton. rm -rf dir löscht es, wenn es da ist. Wenn es nicht da ist, wird nichts gemacht und im Script weitergegangen.

Dass der O-Poster nicht weiss, dass dazu überhaupt kein test Kommando notwendig ist, kann man ihm doch wohl nicht anlasten.

Gruss
norsemanna