ฉันยังใหม่ต่อการเขียนสคริปต์ในการทุบตีและลองทำในสิ่งที่ฉันคิดว่าจะเป็นสิ่งพื้นฐาน ฉันต้องการเรียกใช้ 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 นาทีซึ่งฉันได้ทำงานโดยใช้ cronjob ฉันต้องการตรวจสอบผลลัพธ์ของ curl เพื่อดูว่าสถานะเป็น "200" หรืออื่น ๆ หากเป็นอย่างอื่นฉันต้องการบันทึกผลลัพธ์ไปยังไฟล์
สิ่งที่ฉันไม่สามารถทำงานได้คือif
แถลงการณ์ ตามที่ฉันเข้าใจแล้วคำสั่ง-q
on grep
จะจัดเตรียมโค้ดออกสำหรับif
คำสั่ง อย่างไรก็ตามฉันไม่สามารถทำงานได้ ฉันไปผิดที่ไหน
DNSimple-Domain-Token
ที่ไม่ต้องการLOGIN
ตัวแปร
/var/tmp/icanhazip
) และถ้ามันไม่ได้เปลี่ยนไปจากการใช้งานครั้งสุดท้ายexit 0
ก่อนที่จะทำอะไรอย่างอื่น คุณไม่จำเป็นต้องอัปเดตรายการ DDNS ของคุณทุก ๆ 5 นาทีเฉพาะเมื่อที่อยู่ IP ของคุณเปลี่ยนไป
if
ตรวจสอบและสะท้อนไปยังไฟล์บันทึกทุกครั้งหรือไม่ dnssimpleแสดง$LOGIN
ก่อนหน้า$TOKEN
นี้ แต่คุณพลาดไป บางทีนั่นอาจทำให้สิ่งต่าง ๆ ล้มเหลว