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 if
pernyataannya. Seperti yang saya pahami, -q
pada grep
perintah akan memberikan kode keluar untuk if
pernyataan. Namun sepertinya saya tidak bisa membuatnya bekerja. Di mana saya salah?
DNSimple-Domain-Token
yang tidak perlu LOGIN
variabel.
/var/tmp/icanhazip
) dan jika itu tidak berubah sejak dijalankan terakhir, exit 0
sebelum melakukan hal lain. Anda tidak perlu memperbarui entri DDNS Anda setiap 5 menit, hanya ketika alamat IP Anda berubah.
if
centang dan selalu menggema ke file log? dnssimple menunjukkan$LOGIN
sebelumnya$TOKEN
, tetapi Anda melewatkannya. Mungkin itu yang menyebabkan semuanya gagal?