Ich bin noch sehr neu im Schreiben von Skripten in Bash und probiere nur ein paar Dinge aus, von denen ich dachte, dass sie grundlegende Dinge sind. Ich möchte DDNS ausführen, das von meinem Server mit Ubuntu 14.04 aktualisiert wird.
Ich habe mir bisher Code von dnsimple ausgeliehen:
#!/bin/bash
LOGIN="email"
TOKEN="token"
DOMAIN_ID="domain"
RECORD_ID="record"
IP=`curl -s http://icanhazip.com/`
OUTPUT=`
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-DNSimple-Domain-Token: $TOKEN" \
-X "PUT" \
-i "https://api.dnsimple.com/v1/domains/$DOMAIN_ID/records/$RECORD_ID" \
-d "{\"record\":{\"content\":\"$IP\"}}"`
if ! echo "$OUTPUT" | grep -q "(Status:\s200)"; then
echo "match"
$(echo "$OUTPUT" | grep -oP '(?<="message":")(.[^"]*)' >> /home/ddns/ddns.log)
$(echo "$OUTPUT"| grep -P '(Status:\s[0-9]{3}\s)' >> /home/ddns/ddns.log)
fi
Die Idee ist, dass es alle 5 Minuten läuft, wobei ich mit einem Cronjob arbeite. Ich möchte dann die Ausgabe der Wellung überprüfen, um festzustellen, ob der Status "200" oder ein anderer ist. Wenn es etwas anderes ist, dann möchte ich die Ausgabe in eine Datei speichern.
Was ich nicht zum Arbeiten bringen kann, ist die if
Aussage. Soweit ich weiß, liefert -q
der grep
Befehl on einen Exit-Code für die if
Anweisung. Allerdings kann ich nicht scheinen, es zum Laufen zu bringen. Wo habe ich mich geirrt?
DNSimple-Domain-Token
die die LOGIN
Variable nicht benötigt .
/var/tmp/icanhazip
), und wenn es sich seit dem letzten Durchlauf nicht geändert hat, exit 0
bevor Sie etwas anderes tun. Sie müssen Ihren DDNS-Eintrag nicht alle 5 Minuten aktualisieren, nur wenn sich Ihre IP-Adresse ändert.
if
Prüfung entfernen und immer in die Protokolldatei zurückkehren? dnssimple zeigt ein$LOGIN
vorher$TOKEN
, aber das fehlt dir. Vielleicht scheitert das daran?