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à if
tuyên bố. Theo tôi được biết, các -q
trên grep
lệnh sẽ cung cấp một mã thoát cho if
tuyê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-Token
cái không cần LOGIN
biến.
/var/tmp/icanhazip
) và nếu nó không thay đổi kể từ lần chạy exit 0
trướ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.
if
kiểm tra và luôn lặp lại tệp nhật ký? dnssimple hiển thị$LOGIN
trướ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?