Я все еще очень плохо разбираюсь в скриптах на bash, и просто пробую несколько вещей, которые, как я думал, будут простыми. Я хочу запустить DDNS, который обновляется с моего сервера под управлением Ubuntu 14.04.
Заимствование некоторого кода из dnsimple, это то, что я до сих пор:
#!/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
Идея в том, что он запускается каждые 5 минут, что я работаю, используя cronjob. Затем я хочу проверить вывод curl, чтобы увидеть, если статус "200" или другой. Если это что-то еще, то я хочу сохранить вывод в файл.
То, что я не могу получить работу, это if
утверждение. Насколько я понимаю, команда -q
on grep
предоставит код выхода для if
оператора. Однако я не могу заставить его работать. Где я ошибся?
bash
shell-script
ubuntu
CircularRecursion
источник
источник
if
проверку и всегда откликаетесь на файл журнала? dnssimple показывает$LOGIN
раньше$TOKEN
, но вы упускаете это. Может быть, это заставляет вещи терпеть неудачу?DNSimple-Domain-Token
который не нуждается вLOGIN
переменной./var/tmp/icanhazip
), и если он не изменился с момента последнего запуска,exit 0
прежде чем делать что-либо еще. Вам не нужно обновлять свою запись DDNS каждые 5 минут, только при изменении вашего IP-адреса.Ответы:
Ты почти там. Просто опустите восклицательный знак:
Результат:
if
Условие выполняется , если Grep возвращается с кодом выхода 0 (что означает совпадение).!
Восклицательный знак будет отрицать это.источник
Поскольку вы уже используете bash, вы можете оставить его внутри bash:
Образцы прогонов:
источник
Это не ответ на ваш вопрос, но несколько советов от другого сценариста:
$()
вместо обратных галочек, не используйте их обаif
заявлений$()
Последовательность и простые правила помогут вам отлаживать и поддерживать сценарии в долгосрочной перспективе ...
источник