Saya masih sangat baru dalam scripting di bash, dan hanya mencoba beberapa hal yang saya pikir akan menjadi hal mendasar. Saya ingin menjalankan DDNS yang diperbarui dari server saya yang menjalankan Ubuntu 14.04.
Meminjam beberapa kode dari dnsimple, inilah yang saya miliki sejauh ini:
#!/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
Idenya adalah itu berjalan setiap 5 menit, yang saya kerjakan menggunakan cronjob. Saya kemudian ingin memeriksa output dari ikal untuk melihat apakah statusnya "200" atau lainnya. Jika itu adalah sesuatu yang lain, maka saya ingin menyimpan output ke file.
Yang tidak bisa saya dapatkan adalah ifpernyataannya. Seperti yang saya pahami, -qpada grepperintah akan memberikan kode keluar untuk ifpernyataan. Namun sepertinya saya tidak bisa membuatnya bekerja. Di mana saya salah?
DNSimple-Domain-Tokenyang tidak perlu LOGINvariabel.
/var/tmp/icanhazip) dan jika itu tidak berubah sejak dijalankan terakhir, exit 0sebelum melakukan hal lain. Anda tidak perlu memperbarui entri DDNS Anda setiap 5 menit, hanya ketika alamat IP Anda berubah.
ifcentang dan selalu menggema ke file log? dnssimple menunjukkan$LOGINsebelumnya$TOKEN, tetapi Anda melewatkannya. Mungkin itu yang menyebabkan semuanya gagal?