Here Documents

R

Renn25

Mitglied
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
 
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.
 
Schonmal den exit-code bei angabe einer fehlerhaften Domain betrachtet ?
 
@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)
 
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
 
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
 
@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.
 
Renn25 schrieb:
#!/bin/bash
cat >>ende
Diese Zeilen sollen auf der Standardausgabe erscheinen.
Falls nicht, ist ein Syntaxfehler enthalten.
ende
das sollte "cat <<ende" sein. ansonsten wird in die datei "ende" geschrieben.

auf bald
oenone
 

Ähnliche Themen

CGI laesst sich nicht ausfuehren

Zurück
Oben