Подскажите по элементаному скрипту sh

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Sabrewulf
рядовой
Сообщения: 13
Зарегистрирован: 2013-03-29 10:19:06

Подскажите по элементаному скрипту sh

Непрочитанное сообщение Sabrewulf » 2013-05-30 11:00:38

Необходимо написать скрипт, который преобразовывает доменные имена в ип адреса. У меня получилось так:

Код: Выделить всё

#!/bin/sh
for i in $(cat domain.txt)
do
    dig +short $i
#  echo 1 $i
done > ip.txt
Дальше я его, конечно, усовершенствую различными фильтрами, но теперь споткнулся на одной вещи и не могу понять в чём проблема. dig +short $i ничего не выводит. Если расскомментировать echo, мы видим что всё читается, и корректно выводится список доменных имён. Почему dig остаётся немым? Из консоли dig +short ya.ru нормально отрабатывает.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


Sabrewulf
рядовой
Сообщения: 13
Зарегистрирован: 2013-03-29 10:19:06

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Sabrewulf » 2013-05-30 11:37:30

Тоже самое.

Выяснил, что гадит символ "+" - как его экранировать?

Charlz_Klug_
проходил мимо

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Charlz_Klug_ » 2013-05-30 12:40:38

У меня работает:

Код: Выделить всё

[Charlz_Klug@Meleena]~>$ cat sample.sh
dig +short ya.ru > ip.txt


[Charlz_Klug@Meleena]~>$ sh sample.sh
[Charlz_Klug@Meleena]~>$ cat ip.txt
213.180.193.3
213.180.204.3
77.88.21.3
87.250.250.3
87.250.250.203
87.250.251.3
93.158.134.3
93.158.134.203
[Charlz_Klug@Meleena]~>$

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение rayder » 2013-05-30 13:14:01

странно, у меня нормально отрабатывает. попробуй dig '+short' $i

либо как-то так:

Код: Выделить всё

#!/bin/sh
in=${1}
out=${2}

_cat="/bin/cat"
_dig="/usr/bin/dig"

for domain in `${_cat} ${in}`
do
        ip=`${_dig} +short ${domain}`
        if [ "x${out}" == "x" ];
        then
                echo -e "${domain}\t$ip";
        else
                echo -e "${domain}\t$ip" >> ${out}
        fi
done 
Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.

Sabrewulf
рядовой
Сообщения: 13
Зарегистрирован: 2013-03-29 10:19:06

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Sabrewulf » 2013-05-30 13:25:34

Charlz_Klug_ писал(а):У меня работает:

Код: Выделить всё

[Charlz_Klug@Meleena]~>$ cat sample.sh
dig +short ya.ru > ip.txt
не работает в конструкции do...done, вне её работает
rayder писал(а):странно, у меня нормально отрабатывает. попробуй dig '+short' $i
не помогло

Charlz_Klug_
проходил мимо

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Charlz_Klug_ » 2013-05-30 17:30:14

Sabrewulf писал(а):
Charlz_Klug_ писал(а):У меня работает:

Код: Выделить всё

[Charlz_Klug@Meleena]~>$ cat sample.sh
dig +short ya.ru > ip.txt
не работает в конструкции do...done, вне её работает

Код: Выделить всё

imil@Azadbash:~$ cat sample.sh 
for i in $(cat domain.txt) 
do
dig +short $i >> ip.txt
done

imil@Azadbash:~$ cat domain.txt 
ya.ru
mail.ru

imil@Azadbash:~$ sh sample.sh 
imil@Azadbash:~$ tail ip.txt 
87.250.250.203
87.250.251.3
93.158.134.3
93.158.134.203
213.180.193.3
213.180.204.3
94.100.180.201
217.69.139.199
217.69.139.201
94.100.180.199
imil@Azadbash:~$ 
Всё арбайтен как надо. Под Линуксом правда. Но более чем уверен что и под фряхой будет работать.

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение FreeBSP » 2013-05-30 17:43:08

Код: Выделить всё

[18:40]~/# uname -mrs
FreeBSD 8.2-STABLE amd64
[18:41]~/# cat do
domain.txt   domains.log
[18:41]~/# cat domain.txt
ya.ru
mail.ru
www.ru
[18:41]~/# cat test.sh
#!/bin/sh
for i in $(cat domain.txt)
do
        dig +short $i
        #  echo 1 $i
done > ip.txt
[18:42]~/# sh ~/test.sh
[18:42]~/# cat ip.txt
77.88.21.3
87.250.250.3
87.250.250.203
87.250.251.3
93.158.134.3
93.158.134.203
213.180.193.3
213.180.204.3
217.69.139.201
94.100.180.199
94.100.180.201
217.69.139.199
194.87.0.50
[18:42]~/#               
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Sabrewulf
рядовой
Сообщения: 13
Зарегистрирован: 2013-03-29 10:19:06

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Sabrewulf » 2013-05-31 8:52:12

Спасибо, что обозвали ослом. Рад, что у вас на линуксе скрипт работает.

Код: Выделить всё

# uname -mrs
FreeBSD 9.1-RELEASE-p3 amd64
не работает
Charlz_Klug_ писал(а):Всё арбайтен как надо. Под Линуксом правда. Но более чем уверен что и под фряхой будет работать.
Спасибо, обнадёживает!

:st:

Charlz_Klug_
проходил мимо

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Charlz_Klug_ » 2013-05-31 17:32:26

Sabrewulf писал(а):
Charlz_Klug_ писал(а):Всё арбайтен как надо. Под Линуксом правда. Но более чем уверен что и под фряхой будет работать.
Спасибо, обнадёживает!

:st:
Проверил под фряхой - работает. Если у вас до сих пор не заработало, то попробуйте так: Делаете пандорический захват, лифтите в монаду, потом строите рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляете результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут. Удачи!

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение rayder » 2013-05-31 17:45:57

Sabrewulf писал(а):Спасибо, что обозвали ослом.
Вас никто ослом не называл. Но самокритика это всегда хорошо.

У меня на 9.0 работает, на 8.2 (как показали выше) тоже работает. Можете подождать пока вам покажут что и на 9.1 тоже работает.
Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение rayder » 2013-05-31 19:55:11

так и быть, проверил сам

Код: Выделить всё

root@free91:/root # cat domain.txt
ya.ru
i.ua
gmail.com
root@free91:/root # cat dig.sh
#!/bin/sh
for i in $(cat domain.txt)
do
	dig +short $i
#	echo 1 $i
done > ip.txt
root@free91:/root # sh dig.sh 
root@free91:/root # cat ip.txt 
213.180.204.3
77.88.21.3
87.250.250.3
87.250.250.203
87.250.251.3
93.158.134.3
93.158.134.203
213.180.193.3
91.198.36.14
173.194.112.182
173.194.112.181
root@free91:/root # uname -a
FreeBSD free91 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243826: Tue Dec  4 06:55:39 UTC 2012     root@obrian.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
root@free91:/root #
что вы там у себя поломали мы знать не можем.
Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.

Sabrewulf
рядовой
Сообщения: 13
Зарегистрирован: 2013-03-29 10:19:06

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Sabrewulf » 2013-06-05 12:59:10

Проверил на других серверах - работает. Начал копать, и в итоге разобрался в чём проблема.
Если в domain.txt перевод строки Unix-like (0A), то всё работает, если Windows-like (0D 0A), то работает только полный вариант dig. dig +short не работает! Как прикрутить к первому посту автозамену 0D 0A -> 0A?

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение rmn » 2013-06-05 13:41:55

Код: Выделить всё

cat domain.txt | tr -d "\r"

Sabrewulf
рядовой
Сообщения: 13
Зарегистрирован: 2013-03-29 10:19:06

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Sabrewulf » 2013-06-07 15:48:21

rmn
Спасибо, надо запомнить такую простую и элегантную команду. :)

Оказалось, что с не "неправильным" переводом строки dig просто вылетал, сгенерировав соответствующий ему core файл аж в папке /etc

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Подскажите по элементаному скрипту sh

Непрочитанное сообщение Electronik » 2013-06-08 12:49:24

Charlz_Klug_ писал(а): Если у вас до сих пор не заработало, то попробуйте так: Делаете пандорический захват, лифтите в монаду, потом строите рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляете результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут. Удачи!
+100500
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог