OS X Shell Variablen und Rückgabewerte?

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von Frank71, 08.06.2004.

  1. Frank71

    Frank71 Thread Starter MacUser Mitglied

    Beiträge:
    7
    Zustimmungen:
    0
    MacUser seit:
    08.06.2004
    Hallo,
    seit einigen Tagen versuche ich ein Shellscript zu erstellen.
    Dabei brauche ich den Rückgabewert, der normalerweise in der Variable $? angegeben wird.

    z.B:

    #!/bin/sh

    # testen ob Server erreichbar
    ping -c 1 192.168.10.246 > /dev/null
    if [ $? = 1 ]
    then
    echo Server nicht erreichbar
    else
    echo Server erreichbar
    fi

    Die OSX Shell scheint aber keinen Rückgabewert zu unterstützen.

    Kann mir da irgendjemand helfen? :confused:
     
  2. der grimm

    der grimm MacUser Mitglied

    Beiträge:
    467
    Zustimmungen:
    0
    MacUser seit:
    10.03.2004
    Hi,

    welche Shell benutzt du denn? Wenn du im Terminal einfach mal "ping blub" eingibst, und dann "echo $?".. sicher, dass du da keinen Rückgabewert erhälst? Also bei mir funktioniert das wunderbar (bash).

    Vielleicht liegt der Fehler ansonsten ja auch einfach in deinem Shellskript. Bin nicht so ganz fit, was Shell-Scripting angeht, aber deine If-Abfrage funktioniert so glaube ich nicht unbedingt immer bei allen Unices (z.B. bei AIX geht's so nicht afair). Probier doch mal "if test $? -eq 1".

    Ciao
     
  3. weinford

    weinford MacUser Mitglied

    Beiträge:
    390
    Zustimmungen:
    0
    MacUser seit:
    24.01.2004
    Natürlich unterstützt die OSX shell Rückgabewerte, das ist ja schließlich eine ganz normale bash. Allerdings wirst Du nicht glücklich mit dem Skript, weil ping nicht etwa Rückgabewert 1 gibt, wenn der Server nicht erreichbar ist, sondern nur wenn ein Fehler auftritt. Daß der Server nicht erreichbar ist, sagt ping in seiner Ausgabe und beendet sich dann normal mit Rückgabewert 0.

    Ich hatte mal ein ähnliches Problem, da wollte ich aber nur wissen ob ein Dienst erreichbar ist. Das mache ich jetzt mit nc:

    if ! echo quit | nc 192.168.1.11 22 >/dev/null 2>&1
    then echo Dienst nicht erreichbar

    nc kannste über fink installieren.
     
  4. Frank71

    Frank71 Thread Starter MacUser Mitglied

    Beiträge:
    7
    Zustimmungen:
    0
    MacUser seit:
    08.06.2004
    Hallo
    Zeeke,

    Ich habe keine Ahnung welche Shell ich unter OSX 10.3 benutze.

    Ich habe einfach eine Datei erstellt die ich dann mit ./ starte.

    Mit der if Anweisung hat es nichts zu tun, auch wenn ich mir gleich mit
    echo $? >> logdatei
    anzeigen lasse bekomme ich immer 0 zurück.
     
  5. Frank71

    Frank71 Thread Starter MacUser Mitglied

    Beiträge:
    7
    Zustimmungen:
    0
    MacUser seit:
    08.06.2004
    Danke weinford,

    Dein Vorschlag funktioniert Perfekt.
    Und das beste daran - ich musste nc noch nicht einmal installieren. Weil es anscheinend schon drauf ist.

    clap

    Schönen Tag noch
    Frank71
     
  6. weinford

    weinford MacUser Mitglied

    Beiträge:
    390
    Zustimmungen:
    0
    MacUser seit:
    24.01.2004
    Freut mich! :) Ja, und der Tag ist so schön, ich glaub ich mach mal Feierabend :p
    Euch auch nen schönen Tag :)
     
  7. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
     

    um herauszufinden, welche Shell Du benutzt gibst Du folgendes Kommando ein:
    echo $SHELL

    Frank hat übrigens ein Skript für die einfache Bourne Shell geschrieben, was man an der ersten Zeile sieht.
    Dies ist AFAIK unter Mac OS X mit der bash identisch.

    @ weinford
    schönes shellkonstrukt ;)
     
Die Seite wird geladen...