schleifen - schon wieder shellscript
Wunderschönen guten Tag Liste, ich bin schon wieder an einem Shellscript am Verzweifeln. Wenn Ihr Euch das folgende Script durchlesen solltet, bedenkt bitte, dass ich null Plan vom Programmieren hab (don't laugh ;o) Ich versuche nur, IPs hochzuzählen (? schreibt man das in einem Wort ?). Mit meiner verschachtelten Schleifenkonstrktion (wenn man das so nennen darf) zählt er immer nur $f hoch und steht danach (Abbruch mit Ctrl + C). Warum ? Was mach ich falsch ? Hilft es wenn ich meinen Computer ein bisschen streichle ? Hier mein Script: #!/bin/bash c=0 d=0 e=0 f=0 while [ $c -le 255 ] do let d=$d+1 while [ $d -le 255 ] do let c=$c+1 while [ $e -le 255 ] do let e=$e+1 while [ $f -le 255 ] do let f=$f+1 echo "$c"."$d"."$e"."$f" done done done done exit Wäre mir lieb, wenn Ihr mir nicht nur sagen würdet, was falsch ist, sondern eine kurze Lösung (einen Ansatz) geben würdet. -- SET THE CONTROLS FOR THE HEART OF THE SUN
maX Bauer wrote:
Ich versuche nur, IPs hochzuzählen. Mit meiner verschachtelten Schleifenkonstrktion zählt er immer nur $f hoch und steht danach. Warum ? Was mach ich falsch ?
Du setzt $f,$e,$d nicht zurueck. Du vertauscht $d und $c. Ausserdem gibt's "seq" for c in `seq 0 255`; do for d in `seq 0 255`; do for e in `seq 0 255`; do for f in `seq 0 255`; do echo $c.$d.$e.$f done done done done
Hilft es wenn ich meinen Computer ein bisschen streichle ?
Probier's mal mit leichten Schlaegen auf den Hinterkopf. Peter
Peter Wiersig wrote:
maX Bauer wrote:
Ich versuche nur, IPs hochzuzählen. Mit meiner verschachtelten Schleifenkonstrktion zählt er immer nur $f hoch und steht danach. Warum ? Was mach ich falsch ?
Du setzt $f,$e,$d nicht zurueck. Du vertauscht $d und $c.
Ausserdem gibt's "seq"
for c in `seq 0 255`; do for d in `seq 0 255`; do for e in `seq 0 255`; do for f in `seq 0 255`; do echo $c.$d.$e.$f done done done done
Hilft es wenn ich meinen Computer ein bisschen streichle ?
Probier's mal mit leichten Schlaegen auf den Hinterkopf.
Peter
Oh mann, die Schläge auf den Hinterkopf sollte ich mir wohl selbst zufügen... klar! Die "f"-Schleife ist fertig. Danke für Eure Geduld maX Bauer -- SET THE CONTROLS FOR THE HEART OF THE SUN
Peter Wiersig wrote:
maX Bauer wrote:
Ich versuche nur, IPs hochzuzählen. Mit meiner verschachtelten Schleifenkonstrktion zählt er immer nur $f hoch und steht danach. Warum ? Was mach ich falsch ?
Du setzt $f,$e,$d nicht zurueck. Du vertauscht $d und $c.
Ausserdem gibt's "seq"
for c in `seq 0 255`; do for d in `seq 0 255`; do for e in `seq 0 255`; do for f in `seq 0 255`; do echo $c.$d.$e.$f done done done done
Fuer diejenigen, die programmieren, eventuell ein bisschen einfacher von der Syntax her: ========================================================== #!/bin/bash for ((c=0;c<=255;c++)) ; do for ((d=0;d<=255;d++)) ; do for ((e=0;e<=255;e++)) ; do for ((f=0;f<=255;f++)) ; do echo $c.$d.$e.$f done done done done ========================================================== Gruesse, Thomson -- Thomas Hertweck, Dipl.-Geophys. Geophysikalisches Institut, Universitaet Karlsruhe (TH)
On Mon, 18 Nov 2002 at 18:39 (+0100), Thomas Hertweck wrote:
Peter Wiersig wrote:
maX Bauer wrote:
Ich versuche nur, IPs hochzuzählen. Mit meiner verschachtelten Schleifenkonstrktion zählt er immer nur $f hoch und steht danach. Warum ? Was mach ich falsch ?
Du setzt $f,$e,$d nicht zurueck. Du vertauscht $d und $c.
Ausserdem gibt's "seq"
for c in `seq 0 255`; do for d in `seq 0 255`; do for e in `seq 0 255`; do for f in `seq 0 255`; do echo $c.$d.$e.$f done done done done
Fuer diejenigen, die programmieren, eventuell ein bisschen einfacher von der Syntax her: ========================================================== #!/bin/bash for ((c=0;c<=255;c++)) ; do for ((d=0;d<=255;d++)) ; do for ((e=0;e<=255;e++)) ; do for ((f=0;f<=255;f++)) ; do echo $c.$d.$e.$f done done done done ==========================================================
Slightly OT, aber wenns auch C sein darf - mal ein klein wenig
anderer Ansatz (könnte ein wenig schneller sein ;-):
==========================================================
/* ip.c: IP-Adressen ausgeben
Kompilieren: gcc -o ip ip.c */
#include
Hallo, [F'up nach suse-programming!] On Mon, 18 Nov 2002, Jan Trippler wrote:
Slightly OT, aber wenns auch C sein darf - mal ein klein wenig anderer Ansatz (könnte ein wenig schneller sein ;-):
========================================================== /* ip.c: IP-Adressen ausgeben Kompilieren: gcc -o ip ip.c */
#include
int main (int argc, char **argv) { unsigned long ip = 0;
for (ip = 0; ip <= 0xffffffff; ip ++) printf ("%d.%d.%d.%d\n", (ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff);
return (0); } ==========================================================
Dauert aber immer noch zu lange... Naja, _etwas_ (wg. printf)
schneller geht's noch:
====
/* Fuer die eigene Anwendung den gewunschten Funktionsrumpf */
/* in ein main() einfuegen und den Rest weglassen */
#include
maX Bauer
Ich versuche nur, IPs hochzuzählen (? schreibt man das in einem Wort ?). Mit meiner verschachtelten Schleifenkonstrktion (wenn man das so nennen darf) zählt er immer nur $f hoch und steht danach (Abbruch mit Ctrl + C). Warum ? Was mach ich falsch ? Hilft es wenn ich meinen Computer ein bisschen streichle ?
Es fehlt as Rücksetzen der Variablen in den Schleifen: Sprich, wenn e um eines erhöht wird, dan muß man mit f wieder bei 0 anfangen. Aber Achtung, wenn man so _alle_ IP's höchzählen will, dann dauert das ganz schön lange (das echo wird 2^32 mal ausgeführt (2^ bedeutet 2 hoch):-) Also richtig wäre so was wie: #!/bin/bash c=0 while [ $c -le 255 ] do d=0 while [ $d -le 255 ] do e=0 while [ $e -le 255 ] do f=0 while [ $f -le 255 ] do let f=$f+1 echo "$c"."$d"."$e"."$f" done let e=$e+1 done let d=$d+1 done let c=$c+1 done Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 juergen@informatik-vollmer.de,vollmer@cocolab.de,Juergen.Vollmer@acm.org www.informatik-vollmer.de
participants (6)
-
David Haller
-
Jan.Trippler@t-online.de
-
Jürgen Vollmer
-
maX Bauer
-
Peter Wiersig
-
Thomas Hertweck