Shell-Skript: Fehler?

McAvatar

Admiral Special
Mitglied seit
11.08.2004
Beiträge
1.268
Renomée
8
Standort
Bielefeld, NRW
Hi, hat jemand eine Ahnung, warum das Skript nicht (mehr) funktioniert? Seit der letzten Benutzung am Donnerstag kommt seit heute die Meldung:

./statistics.sh *
'/statistics.sh: line 2: syntax error near unexpected token `do
'/statistics.sh: line 2: `do

Code:
for file in "$@"
do
  echo "Verarbeite $file"
  if test -f $file.prj
   then
    echo "Index bereits vorhanden!"
   else
    echo "Erstelle Index..."
    mkvtree -dna -pl -allout -v -db $file > $file.mkv
    echo "Index generiert."
  fi
  line=$(grep "the recommended prefixlength is" $file.mkv)
  prefixlength=${line##* }
  echo "Empfohlene Praefixlaenge ist: $prefixlength"
  if [ $prefixlength -lt "7" ]
   then
    prefixlength=7
    echo "Setze Match-Laenge = 7"
  fi
  # vmatch -v -d -supermax -l $prefixlength -i $file > $file.stat
  vmatch -v -p -d -l $prefixlength -i $file > $file.stat
done
 
Hat das Skript zufälligerweise Windows-Zeilenumbrüche (CRLF) statt solche für Linux (LF)?

MfG Dalai
 
Ach ja - Windows. :]

Hab's mit dos2unix gerade umgewandelt und schwupp - geht...

Danke für die Erinnerung. :)
 
Nur so als Tipp: das Script ist noch nicht "leerzeichenfest", d.h. Wenn Du in $file Dateinamen mit Leerzeichen haben solltest (was ich nicht hoffe), wird es zu unerwarteten Problemen kommen.

Um das zu beheben musst Du die Dateinamen in Anführungsstriche setzen, außerdem kann man die Robustheit noch erhöhen, wenn man die Namen der Variablen ausdrücklich in geschweifte Klammern setzt. Beispiel: aus der Zeile

Code:
mkvtree -dna -pl -allout -v -db $file > $file.mkv

würde dann

Code:
mkvtree -dna -pl -allout -v -db "${file}" > "${file}.mkv"

So weiß das Script genau, wo Variablennamen anfangen und aufhören und kommt auch bei Leerzeichen nicht durcheinander. Evtl. musst Du dazu aber noch die for-Schleife in eine while-Schleife umformulieren.
 
Zuletzt bearbeitet:
Zurück
Oben Unten