Bash Script - "if" funktioniert nicht

Morphy2k

Lt. Commander
Registriert
Mai 2011
Beiträge
1.682
Moin zusammen,

in Sachen Bash/Shell Script bin ich echt kein Experte und habe mir das meiste nur im Netz zusammen gesucht.
Aus irgendwelchen Gründen möchte der File Check "if" nicht.

Code:
#!/bin/bash

NODEBB="/nodebb"
OVERRIDE="/nodebb-override"

CONFIG="config.json"
PUBLIC="public"
MODULES="node_modules"
LOGS="logs"

cd "$NODEBB"

# Symlink public directory.
if [ ! -f "$OVERRIDE/$PUBLIC" ]; then
	cp -rf "$PUBLIC" "$OVERRIDE/$PUBLIC"
fi
rm -rf "$PUBLIC"
ln -s "$OVERRIDE/$PUBLIC" "$PUBLIC"

# Symlink modules directory.
if [ ! -f "$OVERRIDE/$MODULES" ]; then
	cp -rf "$MODULES" "$OVERRIDE/$MODULES"
fi
rm -rf "$MODULES"
ln -s "$OVERRIDE/$MODULES" "$MODULES"

# Symlink config file.
if [ -f "$CONFIG" ]; then
	cp -rf "$CONFIG" "$OVERRIDE/$CONFIG"
	rm -rf "$CONFIG"
fi
ln -s "$OVERRIDE/$CONFIG" "$CONFIG"

# Symlink logs directory.
if [ ! -f "$OVERRIDE/$LOGS" ]; then
	mkdir "$OVERRIDE/$LOGS"
fi
ln -s "$OVERRIDE/$LOGS" "$LOGS"

# Start NodeBB
node app.js
Zum Beispiel soll er in Zeile 35 er überprüfen ob das Verzeichnis "logs" schon vorhanden ist, wenn nicht soll er Zeile 36 ausführen, wenn ja einfach überspringen, er führt 36 aber immer aus, egal ob vorhanden oder nicht.
Das ganze ist für ein Docker Image.

Hat jemand eine Idee?
 
Bin auch kein bash Experte. Was ich komisch finde ist, dass Du nach dem if ein Semikolon drin hast und hinter then und fi nicht. Nach dem ich mir ein paar Beispiele Andruck habe Wie ich sagen: nimm mal das Semikolon weg und schreib das then in die nächste Zeile.
Oder hinter then eins rein.
 
Zuletzt bearbeitet:
Hm.. ein schuss ins Blaue. Wenn Logs ein Verzeichnis sein soll, müsste dann nicht -d "$OVERRIDE/$LOGS da rein?
 
Hmm, mit den Options hätte ich mich wohl mal auseinandersetzen sollen, f=file, d= directory ? :D
 
-f prüft auf file
-d auf directory
-L auf Symlinks
-e ist ein pauschales "exist"
-x ein executable

Das log ein Verzeichnis ist, wird das nie Erfolg haben. -e oder -d sollten zielführender sein
Ergänzung ()

Wenn Du statt den einfachen Klammern [ ] doppelte verwendest [[ ]] wird die Abfrage in der Shell ausgeführt. Einfache Klammern starten meines Wissens jeweils eine Subshell außerhalb der bash. Das verlangsamt ein Skript (hier eher unwichtig) und hat ggf. eine abweichende eingeschränkte Syntax.

Ansonsten ... merkwürdiges Skript. Kopiert Verzeichnisse um und löscht dann das Original und ersetzt das Original durch einen Link ???

Warum verschiebst Du das nicht einfach mit "mv" ?
 
Zuletzt bearbeitet:
Super, danke euch! Das nächste mal werde ich mich mit den Commands mal etwas mehr auseinandersetzen. :)

Fixed!

@heloklastit das macht keinen Unterschied, die meisten schreiben es wohl in einer neuen Zeile, die, die sich das sparen wollen setzen ein Semikolon.
 
Zurück
Oben