Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

gibt es sowas wie errorlevel unter DOS?

102 views
Skip to first unread message

Thomas Adams

unread,
Jun 11, 1998, 3:00:00 AM6/11/98
to

Mal ne ganz dumme Frage:

Gibts bei Unix so etwas wie die Errorlevel unter DOS? Womit ich also
in einem Script testen könnte, ob z.B. ein ping erfolgreich war oder
nicht?
--
key id 0x1edf6259 at the usual places http://pobox.com/~tadams/

Eckart Hofmann

unread,
Jun 11, 1998, 3:00:00 AM6/11/98
to

Thomas Adams <tad...@pobox.com> wrote:

> Gibts bei Unix so etwas wie die Errorlevel unter DOS? Womit ich also
> in einem Script testen könnte, ob z.B. ein ping erfolgreich war oder
> nicht?

Bei vielen Unix-Shells (ich weiss nicht, ob bei allen) steht der Returnwert
des letzten aufgerufenen Befehls/Programmes in der Variable '$?'.

Hth,
Eckart
--
Ise...@Wunder-Nett.org f y cn rd ths y mst hv bng sng nx
FreeBSD powered. http://www.FreeBSD.org/

Torsten Schneider

unread,
Jun 11, 1998, 3:00:00 AM6/11/98
to

Thomas Adams wrote:

>Gibts bei Unix so etwas wie die Errorlevel unter DOS? Womit ich also
>in einem Script testen könnte, ob z.B. ein ping erfolgreich war oder
>nicht?

Also Du meinst den Rueckgabewert eines Programmes?

In der Bourne Shell (sh) steht das in $?.

--
Overload -- core meltdown sequence initiated.

Georg Kreyerhoff

unread,
Jun 11, 1998, 3:00:00 AM6/11/98
to

tad...@pobox.com (Thomas Adams) writes:

>
> Mal ne ganz dumme Frage:
>

> Gibts bei Unix so etwas wie die Errorlevel unter DOS? Womit ich also
> in einem Script testen könnte, ob z.B. ein ping erfolgreich war oder
> nicht?

In der bourne-shell-Familie (sh, bash, ksh, zsh) wertet if den Rueckgabe-
wert des darauf folgenden Kommandos (oder der Kommandopipeline) aus, also z.B.

if ping -c 1 localhost 2>&1 > /dev/null ; then
echo "localhost lebt"
else
echo "localhost ist tot. Wie kann das sein?"
fi

Aehnliches gilt fuer while.

while ping -c 1 localhost 2>&1 > /dev/null
do
echo "localhost lebt noch"
sleep 60
done

Ansonsten gibt steht der Rueckgabestatus in der Variable ?


In der c-shell heisst die Variable status und das if funktioniert anders
(erwartet einen logischen Ausdruck in der C-Shell-eigenen Syntax).

Georg

Pascal Gienger

unread,
Jun 11, 1998, 3:00:00 AM6/11/98
to

On Thu, 11 Jun 1998 17:24:39 GMT, Thomas Adams <tad...@pobox.com> wrote:
>Mal ne ganz dumme Frage:
>
>Gibts bei Unix so etwas wie die Errorlevel unter DOS? Womit ich also
>in einem Script testen könnte, ob z.B. ein ping erfolgreich war oder
>nicht?

Der Fehlercode steht in der Shellvariablen "$?". Zumindest in der
Bourne Shell. In den Manual Pages der Kommandos stehen die moeglichen
Werte als "RETURN VALUES".

#!/bin/sh

ping -c 3 www.ibm.com 1> /dev/null 2> /dev/null
echo "Fehlercode: $?"
if [ "$?" = "2" ]
then
echo Kein einziges Paket zurueckgekommen. Host wohl down.
fi

Mein ping hat "0" fuer "es kam mindestens ein Paket zurueck", "2" fuer
"Die Pakete gingen zwar raus es kam aber gar nix zurueck" sowie weitere
Fehlercodes, ueber die die Manual Page zu "ping" Aufschluss gibt :)

Pascal
--
p...@znet.de Factum Data - A woman without a man
http://pascal.znet.de/ Pascal Gienger - is like a fish without
573...@skyper.de (Subj!) Inselg. 13, 78462 KN - a bicycle...
http://echo.znet.de:8888/ echo \8888:ed.tenz.ohce\\:ptth

Martin Buck

unread,
Jun 12, 1998, 3:00:00 AM6/12/98
to

Pascal Gienger <p...@znet.de> wrote:
> #!/bin/sh

> ping -c 3 www.ibm.com 1> /dev/null 2> /dev/null
> echo "Fehlercode: $?"
> if [ "$?" = "2" ]

^^^^^^^^^^^^^^^^^
Damit testet Du, ob das echo erfolgreich war. :-)
Besser klappt es so:

#!/bin/sh

ping -c 3 www.ibm.com 1> /dev/null 2> /dev/null

pingstatus=$?
echo "Fehlercode: $pingstatus"
if [ "$pingstatus" = "2" ]


then
echo Kein einziges Paket zurueckgekommen. Host wohl down.
fi


--
Martin Buck *NEW* EMAIL: m...@netwings.ch
PGP key available, MIME mail welcome WWW: http://home.pages.de/~mbuck/

Gernot Zander

unread,
Jun 12, 1998, 3:00:00 AM6/12/98
to

Hi,

in de.comp.os.unix Georg Kreyerhoff <ge...@physik.rwth-aachen.de> wrote:

> In der bourne-shell-Familie (sh, bash, ksh, zsh) wertet if den Rueckgabe-
> wert des darauf folgenden Kommandos (oder der Kommandopipeline) aus, also z.B.

> if ping -c 1 localhost 2>&1 > /dev/null ; then
> echo "localhost lebt"
> else
> echo "localhost ist tot. Wie kann das sein?"
> fi

Funktioniert nur leider nicht, weil ping keinen Returnstatus
abgibt... (also nur 0, immer).

mfg.
Gernot

--
<hi...@gmx.de> (Gernot Zander)
Diese Telekom-Leute arbeiten eigentlich ganz gut, wenn man sie läßt.
Man darf sie nur nicht mit technischen Fakten verwirren, denn dann
läuft alles schief. (Andreas M. Kirchwitz)

Frank Nobis

unread,
Jun 12, 1998, 3:00:00 AM6/12/98
to

>>>>> "Gernot" == Gernot Zander <hi...@gmx.de> writes:

Gernot> Hi,


Gernot> in de.comp.os.unix Georg Kreyerhoff <ge...@physik.rwth-aachen.de> wrote:

>> if ping -c 1 localhost 2>&1 > /dev/null ; then
>> echo "localhost lebt"
>> else
>> echo "localhost ist tot. Wie kann das sein?"
>> fi

Gernot> Funktioniert nur leider nicht, weil ping keinen Returnstatus
Gernot> abgibt... (also nur 0, immer).

Glaub ich nicht:

trinity # ping -c 1 gatekeeper
PING gatekeeper.radio-do.de (193.101.164.1): 56 data bytes
64 bytes from 193.101.164.1: icmp_seq=0 ttl=255 time=1.016 ms

--- gatekeeper.radio-do.de ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 1.016/1.016/1.016/0.000 ms
trinity # echo $?
0

trinity # ping -c 1 unknown
ping: cannot resolve unknown: Unknown host

trinity # echo $?
68

trinity # ping -c 1 kiste
PING kiste.radio-do.de (193.101.164.12): 56 data bytes

--- kiste.radio-do.de ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
trinity # echo $?
2


gatekeeper gibt es und er lebt.

unknown ist absolut unbekannt :-)

und kiste gibt es aber ist gerade aus.

Gruß
Frank
--
Frank Nobis Email: PGP AVAILABLE
Landgrafenstr. 130 dg3dcn http://www.radio-do.de/~fn/
44139 Dortmund Powered by FreeBSD


Karlo Gross

unread,
Jun 12, 1998, 3:00:00 AM6/12/98
to

Gernot Zander <hi...@gmx.de> wrote:
> Hi,

> in de.comp.os.unix Georg Kreyerhoff <ge...@physik.rwth-aachen.de> wrote:

>> In der bourne-shell-Familie (sh, bash, ksh, zsh) wertet if den Rueckgabe-
>> wert des darauf folgenden Kommandos (oder der Kommandopipeline) aus, also z.B.

>> if ping -c 1 localhost 2>&1 > /dev/null ; then


>> echo "localhost lebt"
>> else
>> echo "localhost ist tot. Wie kann das sein?"
>> fi

> Funktioniert nur leider nicht, weil ping keinen Returnstatus


> abgibt... (also nur 0, immer).

If ping does not receive any reply packets at all it will exit with code
1. On error it exits with code 2. Otherwise it exits with code 0. This
makes it possible to use the exit code to see if a host is alive or not.

Karlo

> mfg.
> Gernot

--
email: k...@orion.ddorf.rhein-ruhr.de
smail: Karl-O. Gross Blombachweg 11 40625 Duesseldorf Germany

Guido Goldstein

unread,
Jun 12, 1998, 3:00:00 AM6/12/98
to

Moin!

On 12 Jun 1998 07:56:58 +0200
Gernot Zander <hi...@gmx.de> wrote:
[schnipp]


> > if ping -c 1 localhost 2>&1 > /dev/null ; then
> > echo "localhost lebt"
> > else
> > echo "localhost ist tot. Wie kann das sein?"
> > fi
>
> Funktioniert nur leider nicht, weil ping keinen Returnstatus
> abgibt... (also nur 0, immer).

Äh? Hab' das gerade ausprobiert -- und geht!

--------------------------------------------------------
~$ ping -c 1 irgendwas >/dev/null 2>&1 ; echo $?
1
~$ ping -c 1 localhost >/dev/null 2>&1 ; echo $?
0
~$
--------------------------------------------------------

Der Return-Status eines Programmes bei den Bourne-Shells
steht in der Var. $?. Wenn der da steht, kann man ihn auch in den
Schleifen und anderen Kontrollstrukturen verwenden.

BTW: Eigentlich alle _richtigen_ Unix-Programme geben einen
Return-Status == 0 für Ok und != 0 für Fehler zurück.

Tschüs
--
Guido Goldstein <Guido.G...@t-online.de>
Hiermit widerspreche ich der Nutzung oder Übermittlung
meiner Daten für Werbezwecke oder für die Markt- oder
Meinungsforschung gemäß Par. 28 Abs. 3 Bundesdatenschutzgesetz.

Rainer Nagel

unread,
Jun 12, 1998, 3:00:00 AM6/12/98
to

On 12 Jun 1998 07:56:58 +0200, Gernot Zander <hi...@gmx.de> wrote:
>Funktioniert nur leider nicht, weil ping keinen Returnstatus
>abgibt... (also nur 0, immer).

Bei mir gibt ping -c 4 $IP eine 0 zurück, wenn nindestens ein Paket
zurückkam, sonst 1.

Ciao
--
Rainer Nagel
Rainer...@tashrah.com
Duesseldorfer Linux User Group - http://www.hsp.de/~dlug

Morus Walter

unread,
Jun 12, 1998, 3:00:00 AM6/12/98
to

In article <6lp54i$ens$1...@kastor.inf.tu-dresden.de>,
Eckart Hofmann <Ise...@Wunder-Nett.org> writes:

> Thomas Adams <tad...@pobox.com> wrote:
>
> Bei vielen Unix-Shells (ich weiss nicht, ob bei allen) steht der Returnwert
> des letzten aufgerufenen Befehls/Programmes in der Variable '$?'.
>
In der csh nicht. Das ist $status. (Die tcsh kann beides)

gruesse
Morus
.

Morus Walter

unread,
Jun 12, 1998, 3:00:00 AM6/12/98
to

In article <6lqfva$923$1...@scorpio.in-berlin.de>,
Gernot Zander <hi...@gmx.de> writes:

> Funktioniert nur leider nicht, weil ping keinen Returnstatus
> abgibt... (also nur 0, immer).
>

hmm:
(mow@eco:53) ping -c 1 eco
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.3 ms

--- localhost ping statistics ---


1 packets transmitted, 1 packets received, 0% packet loss

round-trip min/avg/max = 0.3/0.3/0.3 ms
(mow@eco:54) ping -c 1 eco; echo "Status $?"
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.3 ms

--- localhost ping statistics ---


1 packets transmitted, 1 packets received, 0% packet loss

round-trip min/avg/max = 0.3/0.3/0.3 ms
Status 0
(mow@eco:55) ping -c 1 gibtsnicht ; echo "Status $?"
ping: unknown host gibtsnicht
Status 2
(mow@eco:58) ping -c 1 hub-wue ; echo "Status $?"
PING hub-wue.franken.de (193.141.110.10): 56 data bytes
ping: sendto: Network is unreachable
ping: wrote hub-wue.franken.de 64 chars, ret=-1

--- hub-wue.franken.de ping statistics ---


1 packets transmitted, 0 packets received, 100% packet loss

Status 1

Muss wohl mehrere 'ping's geben. Meines stammt aus einer SuSE Linux
Distribution. Eine Versionsangabe war ihm nicht zu entlocken, aber in
der manpage steht was von '4.3 Berkeley Distribution March 16, 1991'.

gruesse
Morus
.

Gernot Zander

unread,
Jun 13, 1998, 3:00:00 AM6/13/98
to

Hi,

in de.comp.os.unix Frank Nobis <f...@Radio-do.de> wrote:
> Gernot> Funktioniert nur leider nicht, weil ping keinen Returnstatus
> Gernot> abgibt... (also nur 0, immer).

> Glaub ich nicht:

> trinity # ping -c 1 gatekeeper
> PING gatekeeper.radio-do.de (193.101.164.1): 56 data bytes
> 64 bytes from 193.101.164.1: icmp_seq=0 ttl=255 time=1.016 ms

> --- gatekeeper.radio-do.de ping statistics ---


> 1 packets transmitted, 1 packets received, 0% packet loss

> round-trip min/avg/max/stddev = 1.016/1.016/1.016/0.000 ms
> trinity # echo $?
> 0

> trinity # ping -c 1 unknown
> ping: cannot resolve unknown: Unknown host

> trinity # echo $?
> 68

> trinity # ping -c 1 kiste
> PING kiste.radio-do.de (193.101.164.12): 56 data bytes

> --- kiste.radio-do.de ping statistics ---


> 1 packets transmitted, 0 packets received, 100% packet loss

> trinity # echo $?
> 2


> gatekeeper gibt es und er lebt.
> unknown ist absolut unbekannt :-)
> und kiste gibt es aber ist gerade aus.

root@scorpio on ttyp5/root 134>ping -c 1 dscorpio
PING dscorpio.in-berlin.de (192.168.42.3): 56 data bytes

--- dscorpio.in-berlin.de ping statistics ---


1 packets transmitted, 0 packets received, 100% packet loss

root@scorpio on ttyp5/root 135>echo $?
0
root@scorpio on ttyp5/root 136>ping -c 1 scorpio
PING scorpio.in-berlin.de (192.109.42.253): 56 data bytes
64 bytes from 192.109.42.253: icmp_seq=0 ttl=64 time=0.2 ms

--- scorpio.in-berlin.de ping statistics ---


1 packets transmitted, 1 packets received, 0% packet loss

round-trip min/avg/max = 0.2/0.2/0.2 ms
root@scorpio on ttyp5/root 137>echo $?
0

dscorpio gibt es, ist aber aus.
Vermutlich machen das also nicht alle ping-Versionen richtig.

mfg.
Gernot

--
<hi...@gmx.de> (Gernot Zander)
Wer viel mißt, mißt Mist.

Gernot Zander

unread,
Jun 13, 1998, 3:00:00 AM6/13/98
to

Hi,

in de.comp.os.unix Karlo Gross <k...@orion.ddorf.rhein-ruhr.de> wrote:
> If ping does not receive any reply packets at all it will exit with code
> 1. On error it exits with code 2. Otherwise it exits with code 0. This
> makes it possible to use the exit code to see if a host is alive or not.

No. As you can see in my other article it does always return 0.
But my ping is old.

mfg.
Gernot

--
<hi...@gmx.de> (Gernot Zander)
<<
_>>_ Lieber 'n heißen Kaffee als das kalte Grausen.
| |
| |)
|____|

Torsten Schneider

unread,
Jun 13, 1998, 3:00:00 AM6/13/98
to

Gernot Zander wrote:

>--- scorpio.in-berlin.de ping statistics ---
>1 packets transmitted, 1 packets received, 0% packet loss
>round-trip min/avg/max = 0.2/0.2/0.2 ms
>root@scorpio on ttyp5/root 137>echo $?
>0
>
>dscorpio gibt es, ist aber aus.
>Vermutlich machen das also nicht alle ping-Versionen richtig.

Welches Unix wird denn da eingesetzt? Die pings von Solaris, Irix und
Linux geben definitiv Errorlevels zurueck.

--
Manche Leute lachen ber einen Witz dreimal:
Das erste Mal, wenn sie ihn hren.
Das zweite Mal, wenn sie ihn weitererzhlen.
Das dritte Mal, wenn sie ihn kapieren.

Gernot Zander

unread,
Jun 13, 1998, 3:00:00 AM6/13/98
to

Hi,

in de.comp.os.unix Torsten Schneider <schn...@mabi.de> wrote:
> >--- scorpio.in-berlin.de ping statistics ---
> >1 packets transmitted, 1 packets received, 0% packet loss
> >round-trip min/avg/max = 0.2/0.2/0.2 ms
> >root@scorpio on ttyp5/root 137>echo $?
> >0
> >
> >dscorpio gibt es, ist aber aus.
> >Vermutlich machen das also nicht alle ping-Versionen richtig.

> Welches Unix wird denn da eingesetzt? Die pings von Solaris, Irix und
> Linux geben definitiv Errorlevels zurueck.

Linux. Aber wie gesagt, ein etwas älteres (Slack 3.1).
Zwar sind einige Libs nachgewachsen und auch einige Tools,
aber ping wohl nicht.

mfg.
Gernot

--
<hi...@gmx.de> (Gernot Zander)
Zwei Dinge scheinen unendlich, das Universum und die menschliche Dummheit.
Beim Universum bin ich mir nicht ganz sicher. (Einstein)

H. Eckert

unread,
Jun 13, 1998, 3:00:00 AM6/13/98
to

hi...@gmx.de (Gernot Zander):

> > if ping -c 1 localhost 2>&1 > /dev/null ; then
> > echo "localhost lebt"
> > else
> > echo "localhost ist tot. Wie kann das sein?"
> > fi
>
> Funktioniert nur leider nicht, weil ping keinen Returnstatus
> abgibt... (also nur 0, immer).

Dann ist aber dein ping kaputt, nicht die Shell:

RETURN VALUES
The ping command returns an exit status of zero if at least one response
was heard from the specified host; a status of two if the transmission
was successful but no responses were received; or another value (from
<sysexits.h>) if an error occurred.

[565] ~ # ping -c 1 jojo
PING jojo.nostromo.in-berlin.de (10.175.55.118): 56 data bytes
ping: sendto: Host is down
--- jojo.nostromo.in-berlin.de ping statistics ---


1 packets transmitted, 0 packets received, 100% packet loss

[566] ~ # echo $?
2


Gruß,
Ripley
--
http://www.in-berlin.de/User/nostromo/
==
"You don't say what kind of CD drive or hard disks you have, but since it is
causing you trouble I'll assume it is IDE." -- comp.unix.bsd.freebsd.misc

Edbert van Eimeren

unread,
Jun 15, 1998, 3:00:00 AM6/15/98
to

Torsten Schneider schrieb:
>
> Gernot Zander wrote:
>
> [Rückgabewert von ping]

>
> Welches Unix wird denn da eingesetzt? Die pings von Solaris, Irix und
> Linux geben definitiv Errorlevels zurueck.

Also unter Irix 5.3 (Indigo R4000) gibt ping immer den Wert 0 zurück.


--
Edbert van Eimeren, Bonn
(vanEi...@home.ivm.de)

Thomas Preymesser

unread,
Jul 9, 1998, 3:00:00 AM7/9/98
to
In article <6lp54i$ens$1...@kastor.inf.tu-dresden.de>,
Eckart Hofmann <Ise...@Wunder-Nett.org> wrote:

>Bei vielen Unix-Shells (ich weiss nicht, ob bei allen) steht der Returnwert
>des letzten aufgerufenen Befehls/Programmes in der Variable '$?'.

Bourne-Shell/bash: $?
csh, tcsh: $status

-Thomas


--
-- t...@odn.de
-- Thomas_P...@n.maus.de
-- http://www.geocities.com/Hollywood/3033/
-- +49-911-811957
-- +49-172-8111959


0 new messages