Problem: syntax error near unexpected token `done'

villiboy

villiboy

Mitglied
hi leute,
hab beim folgenden code probleme!!

#!/bin/bash
lauf=0
ende=5
while [ $lauf -le $ende ]
do
find / -atime -6
lauf= expr $lauf+1
done

Fehler: syntax error near unexpected token `done'

kann mir da wer weiter helfen? wäre echt super!!

danke
 
Aus

Code:
lauf= expr $lauf+1

mach

Code:
lauf=$(expr $lauf + 1)

Gruss, Phorus

edit: Du kannst für obige Zeile auch

Code:
((lauf++))

schreiben.
 
Zuletzt bearbeitet:
danke für die schnelle antwort aber der fehler bleibt leider ...

edit: jetzt kommt die fehlermeldung: syntax error near unexpected token `
shell1.sh: `((lauf++))
 
Zuletzt bearbeitet:
Hallo
Bei mir tut es, aber sicher nicht das was du wills.
Es läuft endlos.
Dem Zuweisungsoperator = darf kein Leerzeichen folgen.
Also würde ich es mal mit :
lauf=$(($lauf+1)); versuchen.
Gruß Wolfgang
 
Hmm, sehe sonst keinen Fehler. Läuft auch fehlerfrei bei mir. Editierst Du vielleicht unter Windows?
 
hallo wolfgang,
bei mir geht es auch nach deiner vorstellung noch nicht. an was könnte es denn liegen? es kommt immer die doofe fehlermeldung mit dem done?
liegt es vieleicht an der bash?

danke

neee unter suse linux 9.2 editiere ich!!!
 
Zuletzt bearbeitet:
bist du sicher dass windows nicht im spiel ist? funktionieren denn andere scripts die du erstellst?
 
ja windows ist auf alle fälle nicht im spiel!! andere skripte funktionieren ja nur dieses nicht!!! so ein müll!!!
mhh ...
 
so gehts auch nicht?
Code:
lauf=0
ende=5

while (($((++lauf)) <= $ende )); do
  find / -atime -6
done
 
hi,
bei mir (SuSE 9.2, bash 3.00.0(1) ) funktioniert es mit

Code:
lauf=`expr $lauf + 1`

wobei meiner Meinung nach wesentlich ist, um das + blanks zu haben.
Der Rest ist mit den Linksticks ist halt nur altmodisch :oldman

hmh
 
Hallo
Wenn du mal mit set -x arbeitest, kannst du sehen was deine Shell interpretiert.

Gruß Wolfgang
 
danke für euere mühen aber ich habe es jetzt mit allen varianten probiert und bei mir geht es immer noch nicht!! immer noch die gleich fehlermeldung!! das ist doch zum verzweifeln! kann es sein, dass ich irgendwie ein update brauche?

fgabe31.sh: line 6: syntax error near unexpected token `done'
Aufgabe31.sh: line 6: `done'
martin@linux:~> set -x Aufgabe31.sh
++ ppwd 2
++ local _t=2 _w _x
++ test -n 2
++ test 2 = 2
++ _t=pts/2
++ test -O /dev/pts/2
+++ dirs +0
++ _w='~'
++ _x=x
++ test 1 -le 18
++ echo -en '\e]2;martin@linux:~\007\e]1;linux\007'
martin@linux:~>
 
Zuletzt bearbeitet:
Kannst Du nochmal Dein momentanes Skript schicken, am besten per cut-and-paste? Dann kann man es besser ueberpruefen, auch Leerzeichen sind, wie Wolfgang_1 schon gesagt hat.
Was ergibt 'bash --version'?

Leg die Datei auch nochmal neu an, d.h., loesche sie und schreibe sie neu. Vielleicht hat sich ein Zeichen eingeschlichen, das man nicht sieht.

Tut bei Dir das ganze mit einer for-Schleife?
Code:
#/bin/bash

for (( i = 0; i <=5; i++)); do
   find / -atime -6
done
 
hmm da ist auch nicht wirklich was zu sehen.
was hast du denn für ne bash version
Code:
bash --version
und kannst du mal nen hex dump von dem script machen, vielleicht hat sich doch irgendwo ein sonderzeichen eingeschlichen
Code:
od --format=x Aufgabe31.sh
 
martin@linux:~> chmod +x Aufgabe31.sh
martin@linux:~> bash Aufgabe31.sh
: command not found2:
'ufgabe31.sh: line 3: syntax error near unexpected token `do
'ufgabe31.sh: line 3: `for (( i = 0; i <=5; i++)); do
martin@linux:~> chmod +x Aufgabe31.sh
martin@linux:~> bash Aufgabe31.sh
: command not found2:
'ufgabe31.sh: line 3: syntax error near unexpected token `do
'ufgabe31.sh: line 3: `for (( i = 0; i <=5; i++)) do
martin@linux:~> bash --version
GNU bash, version 3.00.0(1)-release (i586-suse-linux)
Copyright (C) 2004 Free Software Foundation, Inc.
martin@linux:~> od --format=x Aufgabe31.sh
0000000 622f2123 622f6e69 0d687361 660a0d0a
0000020 2820726f 20692028 3b30203d 3c206920
0000040 203b353d 292b2b69 64202029 660a0d6f
0000060 20646e69 612d202f 656d6974 0d362d20
0000100 6e6f640a 00000065
0000105
martin@linux:~>


#!/bin/bash
lauf=0
ende=5
while (($((++lauf)) <= $ende ));
do
find / -atime -6
done
martin@linux:~> chmod +x Aufgabe31.sh
martin@linux:~> bash Aufgabe31.sh
Aufgabe31.sh: line 7: syntax error near unexpected token `done'
Aufgabe31.sh: line 7: `done'
martin@linux:~
 
Zuletzt bearbeitet:
Hallo
Nur mal so die Frage:
Mit welchem Editor schreibst du das?

Setze mal deine LC_ALL=POSIX,
schreib das anschließend mit vi neu,
und versuch es dann noch mal.
Schaut so aus, als ob deine Shell mit dem Zeichensatz nicht zurechtkommt.

Oder gib es mal direkt als Einzeiler in der Konsole ein.

Gruß Wolfgang
 
villiboy schrieb:
martin@linux:~> od --format=x Aufgabe31.sh
0000000 622f2123 622f6e69 0d687361 660a0d0a
0000020 2820726f 20692028 3b30203d 3c206920
0000040 203b353d 292b2b69 64202029 660a0d6f
0000060 20646e69 612d202f 656d6974 0d362d20
0000100 6e6f640a 00000065
das ist ein windows dokument ;( , da sind ne menge 0d0a drin, also carriage return und line feed ...
 
ninguno schrieb:
das ist ein windows dokument ;( , da sind ne menge 0d0a drin, also carriage return und line feed ...

Genau so sieht es aus.
Deshalb meine Frage nach dem Editor.
Da Windows ja ausgeschlossen wurde, kann der nur falsch konfiguriert sein.

perl -pi -e '~s/\r//g' Aufgabe31.sh

behebt das Problem sicher.

Gruß Wolfgang
 
Wolfgang_1 schrieb:
...
Da Windows ja ausgeschlossen wurde, kann der nur falsch konfiguriert sein.
...

Hmm, es könnte auch sein, dass er sich die (ich denke mal) Hausaufgaben von jemanden kopiert hat, der sie unter Windows erstellt hat.
 
1. das sind keine hausaufgaben
2. editor KDevelop
3. bin newbie in sachen unix

danke
 

Ähnliche Themen

ip6tables Problem

Dateien löschen mit negierun

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

Zeilen kopieren mit SED

Fehlermeldung bei ganz simplen Code

Zurück
Oben