kleines Shell-Skript

flou

Mitglied
Hallo,

wie kann ich mit nem Shell Skript am besten prüfen ob eine Datei "http://www.soundso.de/soundso.dat" vorhanden ist?

Danke

Flou
 
Hallo,
schau mal da:
Code:
#! /bin/bash
FILETOPROOF=http://www.tutorials.de/forum.html

if wget $FILETOPROOF &> /dev/null
then
        echo "Bingo"
        rm -f $FILETOPROOF
else
        echo ":-("
fi

Gruß

RedWing
 
RedWing hat gesagt.:
Hallo,
schau mal da:
Code:
#! /bin/bash
         FILETOPROOF=http://www.tutorials.de/forum.html
         
         if wget $FILETOPROOF &> /dev/null
         then
                 echo "Bingo"
                 rm -f $FILETOPROOF
         else
                 echo ":-("
         fi
Test: FILETOPROOF=http://www.tutorials.de/breakmy.script
Ergebnis: "Bingo"

:)

Versuchs mal so:
Code:
  #! /bin/bash
  urlex=`wget --spider $1 2>&1 | grep -c -E "302|404|failed"`
  if [ $urlex != 0 ]
  then
  	echo "not found"
  else
  	echo "found"
  fi

Das Skript prüft auf Redirect (302), Not Found (404) und falsche URLs (in der Ausgabe von wget taucht irgendwo 'failed' auf).

302: das Objekt existiert nicht, der Server leitet wget aber auf eine Fehlerseite um und wget denkt, das wäre das angeforderte Objekt (was es aber nicht ist).

404: das Objekt existiert nicht und der Server gibt 404 zurück

failed: die URL gibts nicht
 
Zuletzt bearbeitet:
ocb hat gesagt.:
Test: FILETOPROOF=http://www.tutorials.de/breakmy.script
Ergebnis: "Bingo"
Mhm wenn dus schon optimierst solltest du dein Script
wenigstens auf Funktionalität testen:
Code:
xxx@xxx:~> ./test sdgversaerhg
found

Bin mal so frei und berichtige dein Script: ;)
Code:
  #! /bin/bash
  urlex=`wget --spider $1 2>&1 | grep -c -E "302|404|failed"` 
  if [ $urlex -eq 0 ]
  then
        echo "not found"
  else
        echo "found"
  fi

Gruß

RedWing
 
Zuletzt bearbeitet:
Wenn Du mir jetzt noch sagen könntest, wo Du was berichtigt hast? Ich würde eher sagen, Du hast es kaputt gemacht. :D Deine Version führt genau zu dem Verhalten, was Du in Deinem "Test" monierst. Meine Version sagt "not found" und irgendwie stimmt das ja auch, oder? ;)

Ach ja..."optimiert" hab ich nix, nur ein Skript angegeben, das auch _funktioniert_.
 
Zuletzt bearbeitet:
Also ich will es dir nochmal verdeutklichen:

Mein Skript:
Code:
#! /bin/bash 
FILETOPROOF=sdgversaerhg 
if wget $FILETOPROOF &> /dev/null 
then
        echo "Bingo" 
        rm -f $FILETOPROOF
else 
        echo ":-(" 
fi
Ausgabe:
Code:
xxx@taco31:~> ./test2 
:-(

Dein Script:
Code:
  #! /bin/bash
  urlex=`wget --spider $1 2>&1 | grep -c -E "302|404|failed"` 
  if [ $urlex != 0 ]
  then
        echo "not found"
  else
        echo "found"
  fi
Ausgabe:
Code:
xxx@taco31:~> ./test sdyrhg
found

So und jetzt nochmal gibt es die seite sdyrhg? ich glaube
nicht oder?
Dein Script berichtigt:
Code:
  #! /bin/bash
  urlex=`wget --spider $1 2>&1 | grep -c -E "302|404|failed"` 
  if [ $urlex -eq 0 ]
  then
        echo "not found"
  else
        echo "found"
  fi

Ausgabe:
Code:
xxx@taco31:~> ./test sdyrhg
not found
So ists die richtige Funktionaliät gelle?
Dann klappts nämlich auch mitem Nachbarrn

Gruß

RedWing
 
Zuletzt bearbeitet:
Ähm...wir reden schon von den Skripten, die hier in den Code-Blöcken stehen, oder?!

Code:
  <geht dich="" nix="" an="" :=""> $ ./wtest 
  found

Alright, den Fehler gebe ich zu.

Code:
  <geht dich="" nix="" an="" :=""> $ ./wtest sdyrhg
  not found

Tja...also warum das bei Dir nicht so ist, weiß ich net. und eine logische Erklärung dafür erschließt sich mir ebenfalls nicht.

Code:
   <geht dich="" nix="" an="" :=""> $ ./wtest_raven sdyrhg
  found

Hmm...also warum bloß?

$urlex hat den Wert 0, wenn grep in der Ausgabe von wget weder 302, 404 noch "failed" findet. Mit anderen Worten, wenn $urlex == 0 sind wir glücklich und haben was gefunden. Dein Skript sagt: Wenn $urlex == 0 haben wir nichts gefunden ($urlex -eq 0). Das ist die umgekehrte Logik und funktioniert nun mal nicht, da kannste Dich auf'n Kopp stelln. :)
$urlex hat einen Wert > 0, wenn wget irgendwas moniert (302,404,"failed") und deshalb mindestens eine Zeile von grep als match identifiziert wird. Deshalb gilt: wenn $urlex != 0 (oder von mir aus $urlex -neq 0) gibts 'n Fehler und wir sagen das auch...

Summary: Mein Skript hat 'n Problem mit DAUs (wegen der falschen Ausgabe bei keinem Argument...Du bist nicht gemeint), aber nicht mit der Funktionalität. :). Dein Skript funktioniert manchmal, aber nicht immer...
</geht></geht></geht>
 
$urlex hat einen Wert > 0, wenn wget irgendwas moniert (302,404,"failed") und deshalb mindestens eine Zeile von grep als match
identifiziert wird. Deshalb gilt: wenn $urlex != 0 (oder von mir aus $urlex -neq 0) gibts 'n Fehler und wir sagen das auch...
Das klingt logisch is aber anscheinend nicht so oder ich bin
wirklich ein DAU:

Code:
xxx@taco31:~> echo `wget --spider http://foo.de/foo.html >&1 | grep -c -E "302|404|failed"` 
--14:21:41--  http://foo.de/foo.html
           => `foo.html'
Auflösen des Hostnamen »foo.de«.... fertig.
Verbindungsaufbau zu foo.de[212.227.4.54]:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 404 Not Found
14:21:41 FEHLER 404: Not Found.
0

Gruß

RedWing
 
Zuletzt bearbeitet:
Zurück