Here Documents

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Renn25, 26.10.2005.

  1. Renn25

    Renn25 Mitglied

    Dabei seit:
    26.10.2005
    Beiträge:
    41
    Zustimmungen:
    0
    Hallo Leute

    Ich habe hier ein kleines Prob. mit einem Skript, dass ich umsetzen soll.

    Es ist im Zusammenhang mit "Here Documents". Aufgabe des Skriptes soll sein, eine DNS - Abfrage unter Verwendung von "nslookup" auszuführen. Bestimmt soll der vollqualifizierte Domainname der DNS Server und eines Hosts. Zur besseren Übersichtlichkeit soll die Standardfehlerausgabe umgeleitet werden.
    Kommando: nslookup 2>/dev/null

    dann steht noch da...

    #!/bin/bash
    cat >>ende
    Diese Zeilen sollen auf der Standardausgabe erscheinen.
    Falls nicht, ist ein Syntaxfehler enthalten.
    ende

    Mir ist nicht ganz klar, wie ich das umsetzen soll. Klar ist mir, z.B. nslookup www.google.de , dann wird mir der DNS und die IP angezeigt. Aber mit wie ich das mit dieser Fehlerausgabe mache ist mir nicht klar. Ich weiss noch das ich mit dem Anhang "2>/dev/null" Fehlerausgaben ins Jehnseits schicken kann. Nur wenn ich eine fehlerhaft Domainadresse angebe, dann versucht nslookup das erstma trotzdem aufzulösen und gibt mir dann einen Fehler aus, selbst wenn ich das Kommando zu unterdrücken der Fehler mit angebe.

    Wäre super, wenn ihr mir hier mal weiterhelfen könntet.

    Vielen Dank
    Renn
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. kydros

    kydros Jungspund

    Dabei seit:
    29.07.2005
    Beiträge:
    14
    Zustimmungen:
    0
    Ort:
    Hamburg
    Kleine Anregung:
    Code:
    $ nslookup asdfg
    Note:  nslookup is deprecated and may be removed from future releases.
    Consider using the `dig' or `host' programs instead.  Run nslookup with
    the `-sil[ent]' option to prevent this message from appearing.
    Server:         10.0.1.1
    Address:        10.0.1.1#53
    
    ** server can't find asdfg: NXDOMAIN
    
    $ nslookup asdfg 2>/dev/null
    Server:         10.0.1.1
    Address:        10.0.1.1#53
    
    ** server can't find asdfg: NXDOMAIN
    
    Die Fehlermeldung von nslookup geht, wie Du siehst nach stdout und nicht nach stderr. Von daher sollte es ein Leichtes sein, das einfach mit while read... durchzukauen.
     
  4. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Schonmal den exit-code bei angabe einer fehlerhaften Domain betrachtet ?
     
  5. kydros

    kydros Jungspund

    Dabei seit:
    29.07.2005
    Beiträge:
    14
    Zustimmungen:
    0
    Ort:
    Hamburg
    @Cyber: Das bringt leider nichts:
    Code:
    $ nslookup asd 2>1 >&/dev/null; echo $?
    0
    
    (Zumindest unter FreeBSD - aber nslookup sollte sich eigentlich überall gleich verhalten)
     
  6. Renn25

    Renn25 Mitglied

    Dabei seit:
    26.10.2005
    Beiträge:
    41
    Zustimmungen:
    0
    Hallo!

    Wie meinst das mit dem Exit-Code @Cyber. Wie und wo kann ich diesen betrachten?

    Und wie meinst das mit while und read @kydros. Also per "read" kann ich meine IP oder ne URL an nslookup weitergeben. Das habe ich bis jetzt auch schon so programmiert. Was soll ich jetzt mit einer "while" Schleife mache. Klar, damit könnte ich vorher prüfen, ob es sich um eine gültige IP oder URL handelt, aber das kann ich ja auch mit "if" machen. Dazu brauche ich keine Schleife. :think:

    Danke
    Renn
     
  7. #6 Wolfgang, 27.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    nslookup hat kein Errorlevel (exit-code ist immer 0)
    Allerdings solltest du hier nicht zwei Dinge durcheinander hauen.
    Wenn du einen Syntaxfehler suchst, dann hat das nichts mit dem Errorlevel von nslookup zu tun.
    In diesem Fall sollte dir nämlich die Shell einen exit-code bringen. Diesen findest du dann in der Variable $?.

    Kann dagegen nslookup einen Hostname nicht auflösen, so ist der Befehl dennoch ohne Syntaxfehler ausgeführt, in der Variable $? steht folglich 0.

    Auf der Standardausgabe erscheint aber die Zeile :
    ** server can't find domain.tld
    Die Ausgabe kann natürlich varieren, musst du selbst mal testen.

    Willst du nun einen Syntaxfehler abfangen, oder eine erfolglose DNS Anfrage?

    Das ist hier wohl entscheidend.

    Im ersten Fall kannst du natürlich $? auswerten.
    Im Zweiten Fall könntest du mit grep rausfischen was nslookup zurückgibt.

    Gruß Wolfgang
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. kydros

    kydros Jungspund

    Dabei seit:
    29.07.2005
    Beiträge:
    14
    Zustimmungen:
    0
    Ort:
    Hamburg
    @Renn25 Ich meine etwas in der Art wie
    Code:
    nslookup $hostnameOrIP |\
    while read line
    do
      case "$line" in
        '**'*)
          echo "Es ist ein Fehler aufgetreten: " $line
          exit 1;
          ;;
        *.in-addr.arpa*)
          echo Der Hostname ist `echo $line | cut -d: -f2`
          ;;
        Address:*)
          echo Die IP-Adresse lautet `echo $line | cut -d: -f2`
      esac
    done
    
    Hat gegenüber grep den Vorteil, dass Du weder komplizierte reguläre Ausdrücke brauchst noch den Befehl mehrmals ausführen musst, wenn Du die Fehlermeldung haben willst.
     
  10. oenone

    oenone Freier Programmierer[Mod]

    Dabei seit:
    22.08.2002
    Beiträge:
    599
    Zustimmungen:
    0
    Ort:
    Mannheim
    das sollte "cat <<ende" sein. ansonsten wird in die datei "ende" geschrieben.

    auf bald
    oenone
     
Thema:

Here Documents

Die Seite wird geladen...

Here Documents - Ähnliche Themen

  1. Deutscher Rentenversicherer setzt breitflächig Linux ein

    Deutscher Rentenversicherer setzt breitflächig Linux ein: Der größte der 16 deutschen Rentenversicherungsträger, die »Deutsche Rentenversicherung Bund«, setzt bei ihren x86- und Mainframe-Computern auf...
  2. Fraunhofer-Institut für Sichere Informationstechnologie analysiert TrueCrypt

    Fraunhofer-Institut für Sichere Informationstechnologie analysiert TrueCrypt: Im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik (BSI) untersuchte das Fraunhofer-Institut für Sichere Informationstechnologie...
  3. Klünter: Android-Systeme - besser und sicherer als ihr Ruf

    Klünter: Android-Systeme - besser und sicherer als ihr Ruf: Oliver Klünter, Product Manager Mobile bei Matrix42, hält Android-Geräte auch in Unternehmen ohne größere Probleme für einsetzbar. Dabei sollte...
  4. CopperheadOS: Sicheres und offenes Android als Alphaversion

    CopperheadOS: Sicheres und offenes Android als Alphaversion: Die kanadische Sicherheitsfirma Copperhead will eine speziell gehärtete Variante von Android erstellen. Die erste Alphaversion dieses CopperheadOS...
  5. Neuer Patentpool fordert höhere Abgaben für H.265

    Neuer Patentpool fordert höhere Abgaben für H.265: H.265, auch als High Efficiency Video Coding (HEVC) bekannt, ist als Nachfolger von H.264 ein proprietärer Standard zum Codieren von...