Bash dilinde senaryo yazma konusunda hala çok yeniyim ve sadece temel şeyler olacağını düşündüğüm birkaçını deniyorum. Ubuntu 14.04 çalıştıran sunucumdan güncelleştirilen DDNS'yi çalıştırmak istiyorum.
Dnsimple bazı kod ödünç almak, bu şimdiye kadar var:
#!/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
Fikir, bir cronjob kullanarak çalıştığım her 5 dakikada bir çalışıyor olmasıdır. Daha sonra durumun "200" veya diğer olup olmadığını görmek için kıvrımın çıkışını kontrol etmek istiyorum. Başka bir şeyse, çıktıyı bir dosyaya kaydetmek istiyorum.
Çalışamadığım if
ifade. Anladığım kadarıyla -q
, grep
komutta ifade için bir çıkış kodu sağlanacaktır if
. Ancak çalışmasını sağlayamıyorum. Nerede yanlış yaptım?
DNSimple-Domain-Token
gerektirmeyen bir kullanıyorum LOGIN
.
/var/tmp/icanhazip
) ve son çalıştırmadan bu yana değişmediyse, exit 0
başka bir şey yapmadan önbelleğe alın . DDNS girişinizi her 5 dakikada bir güncellemeniz gerekmez, yalnızca IP adresiniz değiştiğinde.
if
Çeki kaldırırsanız ve günlük dosyasına her zaman yankı verirseniz komut dosyanız çalışır mı ? dnssimple daha$LOGIN
önce gösterir$TOKEN
, ancak bunu kaçırıyorsunuz. Belki de bu durumun başarısız olmasına neden olur?