Ich suche nach einer einfachen Shell-Prüfung (+ Curl), die als wahr oder falsch bewertet wird, ob eine URL vorhanden ist (gibt 200 zurück) oder nicht.
Antworten:
Mit --failwird der Exit-Status bei einer fehlgeschlagenen Anforderung ungleich Null. Durch --headdie Verwendung wird das Herunterladen des Dateiinhalts vermieden, da wir ihn für diese Überprüfung nicht benötigen. Durch --silentdie Verwendung wird vermieden, dass Status oder Fehler von der Prüfung selbst ausgegeben werden.
if curl --output /dev/null --silent --head --fail "$url"; then
echo "URL exists: $url"
else
echo "URL does not exist: $url"
fi
Wenn Ihr Server HEAD-Anforderungen ablehnt, können Sie alternativ nur das erste Byte der Datei anfordern:
if curl --output /dev/null --silent --fail -r 0-0 "$url"; then
-r 0-0, nur das erste Byte der Datei anzufordern. Ich habe die Antwort entsprechend geändert.
return 0und return 1für Wahrhaftigkeit und Falschheit, anstatt stdout zu verwenden, um zurückzukehren trueund falseals Zeichenfolgen. Auf diese Weise kann jemand ausführen: if existURL "$url"ohne zusätzlichen (ineffizienten) Aufwand für den Versuch, sein Standard zu erfassen und zu interpretieren.
Ich finde wget ein besseres Werkzeug dafür als CURL; Es gibt weniger Optionen, an die Sie sich erinnern müssen, und Sie können in bash tatsächlich nach dem Wahrheitswert suchen, um festzustellen, ob dies standardmäßig erfolgreich war oder nicht.
if wget --spider http://google.com 2>/dev/null; then
echo "File exists"
else
echo "File does not exist"
fi
Mit dieser --spiderOption sucht wget nur nach der Datei, anstatt sie herunterzuladen, und 2> /dev/nulldie stderr-Ausgabe von wget wird stummgeschaltet.
--failkann man das gleiche mit locken machen.
wget google.com/asdfund curl google.com/asdf. curlGibt standardmäßig EXIT_SUCCESS zurück, wenn ein 404-Fehler wgetauftritt , während EXIT_FAILURE zurückgegeben wird.
--spiderArgument da: Es wird wgetzurückgegeben, nachdem die Existenz der Datei überprüft wurde, anstatt sie herunterzuladen.
-o /dev/null, um das Drucken des Headers auf stdout zu unterdrücken