Je suis encore très nouveau dans les scripts en bash, et j'essaye juste quelques-uns de ce que je pensais être des choses de base. Je veux exécuter DDNS qui se met à jour depuis mon serveur exécutant Ubuntu 14.04.
En empruntant du code à dnsimple, voici ce que j'ai jusqu'à présent:
#!/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'idée est qu'il s'exécute toutes les 5 minutes, ce que je travaille en utilisant un cronjob. Je veux ensuite vérifier la sortie de la boucle pour voir si l'état est "200" ou autre. Si c'est autre chose, je veux enregistrer la sortie dans un fichier.
Ce que je ne peux pas faire, c'est la if
déclaration. Si je comprends bien, la -q
sur la grep
commande fournira un code de sortie pour la if
déclaration. Cependant, je n'arrive pas à le faire fonctionner. Où ai-je mal tourné?
DNSimple-Domain-Token
qui n'a pas besoin de la LOGIN
variable.
/var/tmp/icanhazip
) et s'il n'a pas changé depuis la dernière exécution, exit 0
avant de faire autre chose. vous n'avez pas besoin de mettre à jour votre entrée DDNS toutes les 5 minutes, uniquement lorsque votre adresse IP change.
if
coche et faites toujours écho au fichier journal? dnssimple montre un$LOGIN
avant$TOKEN
, mais ça vous manque. Peut-être que cela fait échouer les choses?