Todavía soy muy nuevo en las secuencias de comandos en bash, y solo intento algunas que pensé que serían cosas básicas. Quiero ejecutar DDNS que se actualiza desde mi servidor que ejecuta Ubuntu 14.04.
Tomando prestado algún código de dnsimple, esto es lo que tengo hasta ahora:
#!/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
La idea es que se ejecuta cada 5 minutos, que tengo trabajando usando un cronjob. Luego quiero verificar la salida del rizo para ver si el estado es "200" u otro. Si es otra cosa, entonces quiero guardar la salida en un archivo.
Lo que no puedo hacer funcionar es la if
declaración. Como yo lo entiendo, la -q
del grep
comando proporcionará un código de salida para el if
comunicado. Sin embargo, parece que no puedo hacer que funcione. ¿Dónde me he equivocado?
DNSimple-Domain-Token
que no necesita la LOGIN
variable.
/var/tmp/icanhazip
) y si no ha cambiado desde la última ejecución, exit 0
antes de hacer cualquier otra cosa. no necesita actualizar su entrada DDNS cada 5 minutos, solo cuando cambia su dirección IP.
if
verificación y siempre hace eco en el archivo de registro? dnssimple muestra un$LOGIN
antes$TOKEN
, pero te lo estás perdiendo. ¿Quizás eso está causando que las cosas fallen?