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