Sono ancora molto nuovo nello scripting in bash, e sto solo provando alcune cose che pensavo fossero cose basilari. Voglio eseguire DDNS che si aggiorna dal mio server che esegue Ubuntu 14.04.
Prendendo in prestito un po 'di codice da dnsimple, questo è quello che ho finora:
#!/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
L'idea è che funziona ogni 5 minuti, che sto lavorando usando un cronjob. Voglio quindi controllare l'output del ricciolo per vedere se lo stato è "200" o altro. Se è qualcos'altro, allora voglio salvare l'output in un file.
Quello che non riesco a far funzionare è la if
dichiarazione. A quanto mi risulta, il -q
sul grep
comando fornirà un codice di uscita per la if
dichiarazione. Tuttavia non riesco a farlo funzionare. Dove ho sbagliato?
DNSimple-Domain-Token
che non ha bisogno della LOGIN
variabile.
/var/tmp/icanhazip
) e se non è cambiato dall'ultima esecuzione, exit 0
prima di fare qualsiasi altra cosa. non è necessario aggiornare la voce DDNS ogni 5 minuti, solo quando il tuo indirizzo IP cambia.
if
segno di spunta e si fa sempre eco al file di registro? dnssimple mostra un$LOGIN
prima$TOKEN
, ma ti manca. Forse questo sta causando il fallimento delle cose?