Re: ssh Frage

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Thu, 18 Mar 2004 09:09:53 +0100 (CET)

Manfred Lotz <manfred.lotz(at)web.de> wrote:
> Oliver Fromme wrote:
> >
> > Manfred Lotz <manfred.lotz(at)web.de> wrote:
> > > somescript.sh:
> > > #! /bin/sh
> > > while [ true ];do
> >
> > Interessante Art, 'ne Endlosschleife zu machen. :-)

Um mal etwas zu elaborieren: [ true ] ist nichts weiter
als ein Test, ob der angegebene String nicht leer ist.
Du kannst auch ebensogut »while [ false ]; ...« schreiben
und würdest trotzdem eine Endlosschleife erhalten.
Es ist also eher keine gute Idee, es so zu machen.

> > > sleep 5
> > > done
> > >
>
> Ja, ich bin nicht so bewandert im scripting und dies kam dabei raus. Was
> ist denn der einfachste Weg für eine Endlosschleife? Mir ist jetzt
> immerhin noch
> while ( sleep 5 );do ;done
> eingefallen.

Das ist auch eher unorthodox, aber funktioniert. :-)
Die runden Klammern sind aber überflüssig (damit machst Du
nur eine zusätzliche Subshell auf, die aber nicht nötig
ist). Im allgemeinen ist es aber -- genau wie in C und an-
deren Programmiersprachen -- empfehlenswert, den Body der
Schleife nicht für die Schleifenbedingung zu mißbrauchen,
um die Selbstdokumentation des Codes zu verbessern.

Am einfachsten ist dies: while :; do sleep 5; done
»:« ist ein Shell-builtin und funktioniert ansonsten wie
/bin/true.

Auch sehr verbreitet: while true; do sleep 5; done
Nachteil ist, daß »true« nicht bei allen Shells built-in
ist. Vorteil ist, daß man in Skripten solche bequemen
Konstrukte machen kann:

      DEBUG=true
      VERBOSE=false
      ...
      if $DEBUG || $VERBOSE; then
            ...
      fi

In diesem konkreten Fall kann man aber auch ganz auf die
Schleife verzichten und einfach »sleep 999999999« schrei-
ben.

Und wo wir gerade bei obskuren Dingen waren, gib mal fol-
gendes in eine normale FreeBSD-/bin/sh ein und warte ab,
was passiert:

      :(){ :;};:

(Das Leerzeichen nach der öffnenden geschweiften Klammer
nicht vergessen.)

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
With Perl you can manipulate text, interact with programs, talk over
networks, drive Web pages, perform arbitrary precision arithmetic,
and write programs that look like Snoopy swearing.
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 18 Mar 2004 - 09:10:36 CET

search this site