
Мне нужно выполнить dig по доменам и псевдонимам этих доменов, поэтому результат будет следующим:
ЕСЛИ домен (+ не имеет псевдонима) и использует мои серверы имен -> тогда вывести
ЕСЛИ и домен, и псевдоним используют мои серверы имен -> тогда вывести
Все остальное нет (включая случаи, когда домен использует мои серверы имен, а псевдоним — нет). У меня есть домены, хранящиеся в MySQL, и вот скрипт, над которым я работаю:
for domain in `echo "$QUERY1" | mysql -N -s -u $USER -p$PASS $DBNAME -h$HOST | awk '{print $1}'; do
lookup=$(dig $domain ns +short)
if [[ "$lookup" =~ 'XXX' ]]; then
our=1
break
else
our=0
break
fi
done
В этом ЗАПРОСЕ я перечисляю все (и домены, и псевдонимы). Конечно, я могу создать другой запрос, чтобы перечислить только псевдонимы или только домены. Казалось бы, мне нужно сгруппировать все псевдонимы домена и выполнить цикл по списку доменного имени + псевдонимов. Если какой-либо из них не использует NS, мне придется задать переменную, которая диктует вывод домена. Дайте мне знать, какие у вас есть идеи, и, пожалуйста, поделитесь решением, если это возможно.
решение1
Рассмотрите следующую альтернативу сценарию, над которым вы работаете:
mysql --silent --skip-column-names \
--user="$USER" --password="$PASSWORD" \
--host="$HOST" --database="$DBNAME" \
--execute="$QUERY1" |
awk '{ printf("%s ns +short\n", $1) }' |
if dig -f - | grep -q "XXX"; then
our=1
else
our=0
fi
Я предпочитаю использовать длинные опции в скриптах, поскольку они самодокументируемы.
Запрос $QUERY1
можно составить таким образом, что в этом awk
нет необходимости:
SELECT CONCAT(column, " ns +short") FROM ...
Я заставил dig
его запросы считываться из стандартного ввода из канала, awk
и он grep
помогает нам находить их XXX
в выводе.
Не требуется никаких сложных циклов.
Разумеется, в конечном итоге он не делает то, что вам нужно, а только то, что вы делаете в данный момент, но поскольку я не слишком разбираюсь в DNS-поисках, я оставлю все как есть.