Tôi vẫn còn rất mới với kịch bản trong bash, và chỉ thử một vài điều tôi nghĩ sẽ là những điều cơ bản. Tôi muốn chạy DDNS cập nhật từ máy chủ của tôi chạy Ubuntu 14.04.
Mượn một số mã từ dnsimple, đây là những gì tôi có cho đến nay:
#!/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
Ý tưởng là nó chạy cứ sau 5 phút, mà tôi đã làm việc bằng cách sử dụng một cronjob. Sau đó tôi muốn kiểm tra đầu ra của cuộn tròn để xem trạng thái là "200" hay khác. Nếu nó là một cái gì đó khác, thì tôi muốn lưu kết quả đầu ra vào một tập tin.
Những gì tôi không thể làm việc là iftuyên bố. Theo tôi được biết, các -qtrên greplệnh sẽ cung cấp một mã thoát cho iftuyên bố. Tuy nhiên tôi dường như không thể làm cho nó hoạt động. Tôi đã đi sai ở đâu?
DNSimple-Domain-Tokencái không cần LOGINbiến.
/var/tmp/icanhazip) và nếu nó không thay đổi kể từ lần chạy exit 0trước , trước khi làm bất cứ điều gì khác. bạn không cần cập nhật mục nhập DDNS của mình sau mỗi 5 phút, chỉ khi địa chỉ IP của bạn thay đổi.
ifkiểm tra và luôn lặp lại tệp nhật ký? dnssimple hiển thị$LOGINtrước đó$TOKEN, nhưng bạn đang thiếu điều đó. Có lẽ đó là nguyên nhân khiến mọi thứ thất bại?