PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash und while schleife



schlange
14-07-2004, 08:40
hi

ich möchte eine while schleife erstellen die von 1 - 100 zählt. aber es will nicht funktionieren. wo liegt der fehler?

hier das skript:

#!/bin/sh
i=1
while [ $i -le 100 ]
do
echo $i
i='expr $i + 1'
done

hier die fehlermeldung:

schlange@client2:~/cip$ ./download
1
./download: line 3: [: too many arguments
schlange@client2:~/cip$

bitte helfts mir ich verzweifle noch.

mfg schlange

msi
14-07-2004, 08:58
for a in `seq 1 100`; do echo $a; done

schlange
14-07-2004, 09:29
danke msi für die schnelle anntwort. ist aber nicht das was ich will das skript soll auch die zahlen 1-100 ausgeben. bei deinen skript bekomme ich nur die ausgabe:
seq 1 100

wenn es mit der while schleife nicht geht ok. aber warum ist das skript bei selflinux so geschrieben?

mfg schlange

bash_azubi
14-07-2004, 09:40
Wenn du mit der bash arbeitest, geht das in jedem Fall:
for a in $(seq 1 100); do echo $a; done

Aber auch das Beispiel von msi funktioniert bei mir eindeutig :)

In deinem Beispiel sind die backticks nicht richtig geschrieben, es muß heißen
i=`expr $i + 1` oder in der bash eben i=$(expr $i +1 )

Du hast ' anstelle von ` geschrieben!
Alles was zwischen den beiden '' steht, wird von der shell ignoriert.
Also die Variable $i wird nicht zu der Zahl expandiert und der Ausdruck nicht mittels expr ausgeführt.
Ich hoffe das ist ein wenig klar geworden.

schlange
14-07-2004, 10:16
danke bash_azubi

das war der fehler. jetzt wird mir auch klar warum er bei mir die 1 ausgab und dann erst in der zeile mit while den fehler meldet. obwoh er sie schon mal abgearbeitet hatte.

giebt es gute online tut`s um das bash skript schreiben zu lernen?

mfg schlange

fork
14-07-2004, 16:49
Für so ein aufwendiges Programmierproblem braucht man in jedem Fall eine leistungsfähige Programmiersprache, hier Perl:

perl -e 'print "$_\n" for(1 .. 100) '