2010-12-30 10 views
2

Das folgende Bash-Skript erstellt ein Verzeichnis, wenn nicht existiert und schreibt eine Datei in es. Wenn ein Verzeichnis vorhanden ist, ruft es jetzt eine Liste von Dateien dieses in einem Array eingekapselten Verzeichnisses ab. Dies ist der Code:erwartet fi Bug in Bash-Skript

if [ -d $ETC_DIR ]; then 
    echo " * wan27 has been found on your system" 
    echo " * checking for installed versions" 
    versions=(`ls $ETC_DIR`) # line 27 
else 
    echo " * First time installation! Creating etc directory now..." 
    mkdir $ETC_DIR 
    echo "$VERSION\n$USERi\n`date +%Y%m%d%H%M%S`\n$ROOT_DIR" > $ETC_DIR/install_$VERSION.txt 
fi 

Und das ist, was die Anschlussausgänge:

27: Syntax error: "(" unexpected (expecting "fi") 

So, Zeile 27 tatsächlich ist dies ein in ersten Auszug aus Code:

versions=(`ls $ETC_DIR`) 

Was ist Ich mache falsch? Ich habe auch Semikolons ausprobiert, aber es endete mit dem gleichen Ergebnis ...

+1

Sie Linie 1 ~ 23 als auch enthalten sollte – ajreal

+0

Sie sollten sagen 'Versionen = ($ ETC_DIR/*)' stattdessen auf den Ausgang der Berufung von 'ls'. – Sorpigal

Antwort

6

Ihr Skript basiert auf einer Bash-Funktion (Erstellen eines Arrays mit Zuweisung durch Klammern), aber es wird von der Bourne-Shell ausgeführt.

Ändern Sie die erste Zeile des Skripts zu:

#!/bin/bash 
+0

ja, das hat den Trick gemacht! Ich habe auch Zeile 27 durch Versions = $ ersetzt (ls $ ETC_DIR) – fabjoa