मैं अभी भी बैश में स्क्रिप्टिंग के लिए बहुत नया हूं, और बस कुछ कोशिश कर रहा हूं जो मुझे लगा कि बुनियादी चीजें होंगी। मैं DDNS चलाना चाहता हूं जो Ubuntu 14.04 चलाने वाले मेरे सर्वर से अपडेट होता है।
कुछ कोड dnsimple से उधार लेना, यह वही है जो मैंने अभी तक किया है:
#!/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
विचार यह है कि यह हर 5 मिनट में चलता है, जिसे मैंने क्रोनजोब का उपयोग करके काम किया है। मैं तब यह देखने के लिए कर्ल के आउटपुट की जांच करना चाहता हूं कि क्या स्थिति "200" या अन्य है। अगर यह कुछ और है, तो मैं आउटपुट को एक फ़ाइल में सहेजना चाहता हूं।
मैं जो काम नहीं कर सकता वह if
बयान है। जैसा कि मैं इसे समझता हूं, कमांड -q
पर बयान grep
के लिए एक निकास कोड प्रदान करेगा if
। हालाँकि मुझे यह काम नहीं मिल रहा है। मैं कहाँ पर गलत हो गया?
DNSimple-Domain-Token
जो LOGIN
चर की जरूरत नहीं है ।
/var/tmp/icanhazip
) कैश करें और यदि वह अंतिम रन के बाद, exit 0
कुछ भी करने से पहले नहीं बदला है। आपको अपने डीडीएनएस प्रविष्टि को हर 5 मिनट में अपडेट करने की आवश्यकता नहीं है, केवल तभी जब आपका आईपी पता बदलता है।
if
चेक हटाते हैं और लॉग फ़ाइल में हमेशा गूँजते हैं तो क्या आपकी स्क्रिप्ट काम करती है ? dnssimple$LOGIN
पहले दिखाता है$TOKEN
, लेकिन आप उसे याद कर रहे हैं। शायद यही कारण है कि चीजें विफल हो रही हैं?