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.
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."
Danke! Funktioniert. Aber du weisst ja, reich den kleinen Finger und sie wollen den ganzen Arm Daher noch eine kleine Zusatzfrage: wenn das Verzeichnis NICHT exisitert will ich es anlegen - wie bekomme ich das hin?
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“ $?
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.
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.
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.