Одной из проблем может быть то, что ваш wget
создает файл независимо от того, существует ли исходный файл, поэтому проверка на существование всегда будет выполняться.
if [ -s $TMPNAMED ]
then
echo "done." # file exists AND has data
else
echo "no new data!"
exit
fi
проверит, является ли он пустым или не существует, и завершит работу, если это так. Это может быть проблемой с вашим if [ -e $ZONELOCATION/$ZONE.db ]
.
sed
или awk
может сделать все это в одной строке:
grep "^zone" $TMPNAMED | cut -d " " -f "2" | cut -d "\"" -f 2 > $TMPZONEFILE
sed '1,5d' $TMPZONEFILE > $TMP
но мне нужно будет посмотреть некоторые примеры данных, чтобы предложить решение.
Упрощенное цитирование:
echo "done. ($TMPZONEFILE)"
Вы не используете переменную IGNORE
или updates
. Я не вижу причин для его экспорта. Кроме того, если вы полагаетесь на него в другом месте, его значение не сохранится после выхода из цикла while
, поскольку передача чего-либо (в данном случае grep
) в while
устанавливает подоболочку. Может быть лучше сделать один из них:
Bash:
while ...
do
...
done <(grep -vf ignore.txt $TMPZONEFILE)
ш
grep -vf ignore.txt $TMPZONEFILE > tmp.out
while ...
do
...
done < tmp.out
Кстати, я рекомендую использовать mktemp
или tempfile
для создания временных файлов.
Это может быть более читабельным и позволяет вам включать кавычки без необходимости экранировать их:
cat << EOF >> "$NAMED"
zone "$ZONE" {
type slave;
file "$ZONELOCATION/$ZONE.db";
masters { 91.121.75.205; };
allow-notify { 91.121.75.205; };
};
EOF
Это всегда хорошая привычка заключать в кавычки переменные, которые содержат имена файлов.