LINUX.ORG.RU

Помогите со скриптом на BASH

 , ,


0

1

Дано: /var/named

в котором содержаться файлы зон

имеют вид: some.domain.com.db

Нужно:

В каждый файл зоны добавить сабдомен «test»

Пришедшие в голову идеи:

ls директорию, и grep .db прочитанное Далее, откусываю .db Далее в файлах зон пытаюсь sed'ом искать ip зоны по регекспу

Вот на этом месте и затупил. В баше я нуп Пока получилось что-то типа: for i in $(ls |grep .db ); do f=$(basename $i .db); ip=$(sed -n '/«${f}»[.]/{n;p;}' $i); echo $ip; done

echo $ip просто чтобы проверить что в переменной.

По идее sed должен отдать мне все, что кроме регекспа, вот тут я и затупил.

Прошу подсказок. Или ткните в пример, где в sed с регекспом передают переменную. Спасибо заранее.



Последнее исправление: CYB3R (всего исправлений: 1)

Двойные кавычки

wlan ★★
()
rename 's/^/test./' /var/named/*
anonymous
()

В результате получилось вот так:

for i in $(ls /var/named |grep .db); do f=`echo ${i}| cut -d'.' -f1,2`; ip=`grep «$f. IN A» /var/named/${i}| grep -v localhost | cut -d' ' -f4`; sed -i «$ a \sometestdomain. IN A $ip» /var/named/${i}; done

Shepard
() автор топика
Ответ на: комментарий от Shepard

for i in $(ls /var/named |grep .db); do f=`echo ${i}| cut -d'.' -f1,2`; ip=`grep «$f. IN A» /var/named/${i}| grep -v localhost | cut -d' ' -f4`; sed -i «$ a \sometestdomain. IN A $ip» /var/named/${i}; done

хочется взять и у***

emulek
()
Ответ на: комментарий от beastie

В данном случае это было просто упражнение, а не конкретная прикладная задача. На месте файлов зон мог быть кто угодно :3

Shepard
() автор топика
Ответ на: комментарий от Shepard

обычно для таких задач уже есть средства. не нужно изобретать велосипеды

powerguy ★★★
()
Ответ на: комментарий от Shepard

Сомнительное упражнение чесать левой пяткой за правым ухом.

beastie ★★★★★
()
Ответ на: комментарий от Shepard

Боже, да тут обосновывать даже не надо, код просто не работает.

for i in $(ls /var/named |grep .db)

Этот код перечислил бы и файлы типа /var/named/adb.log, например.

Можно сделать так:

for i in /var/named/*.db

И потом использовать ${i#/var/named/}. Можно сделать cd /var/named, а потом for i in *.db.

grep "$f. IN A"
grep -v localhost

Ну человек просто не понимает, как работает grep, с этим трудно что-то поделать, жаль, что мой mysuperlocalhost.example.com отсеется этим грепом, например.

Есть готовый инструмент, который справляется с задачей и делает это хорошо, а эта наколенная поделка даже не работает.

gentoo_root ★★★★★
()
Ответ на: комментарий от Shepard

В данном случае это было просто упражнение

садись, два.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.