PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shell - endlosschleife warum??



misanthrop
06-05-2003, 16:36
also folgendes soll ein quiz für die shell sein. die fragen befinden sich in ner textdatei.
bin soweit schon gekommen. das stellen der fragen usw. geht auch. nur seit ich das ganze in einer Schleife mache hört diese trotz break nicht mehr auf. Eigentlich soll sie aufhören wenn die Zählvariable gleich der Anzahl der Fragen im Fragenkatalog ist...
nur irgendwie naja...schaut mal selbst...


wäre nett wenn ihr helfen könntet...hab nicht so den durchblick inner shell....

#!/bin/sh

i=1 #i zähler für die while-schleife
rcount=0 #in dieser Variablen wird die Anzahl der richtigen Antworten festgehalten
wcount=0 #in dieser Variablen wird die Anzahl der falschen Antworten festgehalten
zfragen=$(wc -l ./fragen) #anzahl der fragen auslesen



while :

do

if test ["$i" = "$zfragen"]
then
break;
else
grep ^1 ./fragen | cut -f2 -d: #die frage auslesen

echo ""

grep ^1 ./fragen | cut -f3 -d: #die antworten auslesen
echo ""
echo "Geben Sie eine Antwort (zahl)"

richtig=$(grep ^1 ./fragen | cut -f4 -d:) #richtige antwort auslesen

read antwort #benutzereingabe

if test "$antwort" = "$richtig" #vergleich der eingabe mit der richtigen antwort
then
echo "Das war richtig!!! TADA!!!"
rcount=`expr $rcount + 1` #richtige antwort hochzählen
i=`expr $i + 1` #zählvariable hoch
else
echo "LOOOOSSSEEEEERRRRRR!!!"
i=`expr $i + 1` #zählvariable hoch
fi

fi
done

Jasper
06-05-2003, 17:58
Original geschrieben von misanthrop
zfragen=$(wc -l ./fragen) #anzahl der fragen auslesen
....


while :

do

if test ["$i" = "$zfragen"]
...


sieh dir mal den output von 'wc -l ./fragen' an. der vergleich $i = $zfragen vergleicht 2 strings, die nie gleich sein werden wegen dem output von wc.

besser ist:

zfragen=$(wc -l < ./fragen)

...

if test [ $i -eq $zfragen ]

...

und statt

rcount=`expr $rcount + 1`

schreib

rcount=$((rcount + 1))


-j

misanthrop
06-05-2003, 21:36
klar, der output von wc ist ja immer mit datei angabe ;)

vielen dank... da bringt mich wahscheinlich weiter!!!

ich werds morgen versuchen und das ergebnis posten...


vielen dank nochmal ;)

misanthrop
07-05-2003, 08:06
hab das jetzt so gemacht mit dem if:

if test [$i -eq $zfragen]


dabei kommt heraus:

./quiz: test: [1: integer expression expected


wenn ich es so schreibe if test [$i -eq $zfragen]

kommt das:
./quiz: test: too many arguments


wo ist das problem?!

Jasper
07-05-2003, 08:24
Original geschrieben von misanthrop
wo ist das problem?!

fehler von mir und fehlende leerzeichen:

if [<space>$i -eq $zfragen<space>]; then

der befehl 'test' und '[' sind das gleiche, deshalb kann 'test' entfallen

-j

misanthrop
07-05-2003, 09:53
habs jetzt so gemacht...
dann bekomm ich ./quiz: line 15: syntax error near unexpected token `then'

update jetzt gehts...

misanthrop
07-05-2003, 10:13
kann mir jetzt vielleicht noch jemand sagen, wie ich am besten ein script schreibe, das neue Fragen in die Textdatei einfügen kann?!

die fragen schauen so aus:

1:Frage:mögliche antworten:richtige Antwort