Shell‑скрипты, Ansible, deployment‑сценарии и другие подходы к автоматизации задач администрирования.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
vaikos
- рядовой
- Сообщения: 19
- Зарегистрирован: 2009-11-14 8:50:53
Непрочитанное сообщение
vaikos » 2010-04-26 11:21:44
Уважаемые гуру.
У меня не получается передать от'grep'епованный параметр curl'у в скрипте (да и в самом шелле)
Код: Выделить всё
#!/bin/sh
grep -o '[0-9]*' | curl -d "param1=username¶m2=$1" http://somedomain.ru/index.php
Сам grep отрабатывает нормально, выдает допустим значение 12345. Мне нужно передать это значение curl'у как param2=12345.
Правильно ли я передаю параметр через param2=$1? Подскажите как правильно сделать такое?
vaikos
-
Хостинг HostFood.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/
-
terminus
- майор
- Сообщения: 2305
- Зарегистрирован: 2007-10-29 11:27:35
- Откуда: Рига
Непрочитанное сообщение
terminus » 2010-04-26 12:02:52
Код: Выделить всё
#!/bin/sh
grep -o '[0-9]*' | xargs ONE=
curl -d "param1=username¶m2=$ONE" http://somedomain.ru/index.php

Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.
terminus
-
vaikos
- рядовой
- Сообщения: 19
- Зарегистрирован: 2009-11-14 8:50:53
Непрочитанное сообщение
vaikos » 2010-04-26 13:18:11
terminus писал(а):Код: Выделить всё
#!/bin/sh
grep -o '[0-9]*' | xargs ONE=
curl -d "param1=username¶m2=$ONE" http://somedomain.ru/index.php

Спасибо, Ваш вариант работает!!!

Заодно я узнал про команду xargs
Остается интересным почему мой вариант не приносит желаемое

vaikos
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2010-04-26 13:46:42
можно и без xargs
Код: Выделить всё
#!/bin/sh
curl -d "param1=username¶m2=$(grep -o '[0-9]*')" http://somedomain.ru/index.php
Гость
-
vaikos
- рядовой
- Сообщения: 19
- Зарегистрирован: 2009-11-14 8:50:53
Непрочитанное сообщение
vaikos » 2010-04-26 14:14:17
Гость писал(а):можно и без xargs
Код: Выделить всё
#!/bin/sh
curl -d "param1=username¶m2=$(grep -o '[0-9]*')" http://somedomain.ru/index.php
Дык, а как в такой конструкции передать входные данные самому
grep'у???
У меня в одной строке
curl передает инфу
grep'у, тот в свою очередь следующему
grep'у, а он уже опять
curl'у

Т.е.:
curl | grep | grep | curl.
И вот второй
grep второму
curl'у через
$1 отдать инфу не может.
Пример с
$1 брал из инета, но там был не
curl, а
awk.
P.S. Два раза использую
grep, ибо
sed и
awk пока раскурить не могу...
vaikos
-
vaikos
- рядовой
- Сообщения: 19
- Зарегистрирован: 2009-11-14 8:50:53
Непрочитанное сообщение
vaikos » 2010-04-26 16:18:25
vaikos писал(а):terminus писал(а):Код: Выделить всё
#!/bin/sh
grep -o '[0-9]*' | xargs ONE=
curl -d "param1=username¶m2=$ONE" http://somedomain.ru/index.php

Спасибо, Ваш вариант работает!!!

Заодно я узнал про команду xargs
Остается интересным почему мой вариант не приносит желаемое

Ниче не понимаю!!!

Ща пишет:
vaikos
-
terminus
- майор
- Сообщения: 2305
- Зарегистрирован: 2007-10-29 11:27:35
- Откуда: Рига
Непрочитанное сообщение
terminus » 2010-04-26 16:22:24
Код: Выделить всё
#!/bin/sh
grep -o '[0-9]*' | xargs set ONE=
curl -d "param1=username¶m2=$ONE" http://somedomain.ru/index.php
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.
terminus
-
vaikos
- рядовой
- Сообщения: 19
- Зарегистрирован: 2009-11-14 8:50:53
Непрочитанное сообщение
vaikos » 2010-04-26 16:34:17
terminus писал(а):Код: Выделить всё
#!/bin/sh
grep -o '[0-9]*' | xargs set ONE=
curl -d "param1=username¶m2=$ONE" http://somedomain.ru/index.php
Код: Выделить всё
pc$ echo "1234567890" | grep -o '[3-8]*' | xargs
345678
pc$
Код: Выделить всё
pc$ echo "1234567890" | grep -o '[3-8]*' | xargs set ONE=
xargs: set: No such file or directory
pc$

может у меня че с путями?? Сам
set из шелла пускается нормально.
vaikos
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2010-04-26 19:07:03
vaikos писал(а):как в такой конструкции передать входные данные самому grep'у?
grep у тя как брал данные со
/dev/stdout так и берет
vaikos писал(а):curl | grep | grep | curl
этого нет в исходном сообщении
ps, не знаю что курит
terminusКод: Выделить всё
$ echo blah | xargs ONE=
xargs: ONE=: No such file or directory
$ echo blah | xargs set ONE=
xargs: set: No such file or directory
пробовал на sh, tcsh, bash, zsh. Присвоение значение переменной не является внешней командой, кою можно подсунуть xargs. Да и xargs всегда ставит пробел после команды.
Гость
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2010-04-26 19:09:47
Гость писал(а):как брал данные со /dev/stdout так и берет
пардон, std
in, т.е. напр.
curl блаблабла | твой_скрипт.sh
Гость
-
x6e6564
- проходил мимо
Непрочитанное сообщение
x6e6564 » 2010-04-27 6:52:46
Может так:
Код: Выделить всё
echo curl -d "param1=username¶m2=`echo "1234567890" | grep -o '[3-8].*'`" http://somedomain.ru/index.php
curl -d param1=username¶m2=34567890 http://somedomain.ru/index.php
т.е.
Код: Выделить всё
#!/bin/sh
curl -d "param1=username¶m2=`grep -o '[0-9].*'`" http://somedomain.ru/index.php
x6e6564
-
vaikos
- рядовой
- Сообщения: 19
- Зарегистрирован: 2009-11-14 8:50:53
Непрочитанное сообщение
vaikos » 2010-04-27 14:42:18
x6e6564 писал(а):Может так:
Код: Выделить всё
echo curl -d "param1=username¶m2=`echo "1234567890" | grep -o '[3-8].*'`" http://somedomain.ru/index.php
curl -d param1=username¶m2=34567890 http://somedomain.ru/index.php
т.е.
Код: Выделить всё
#!/bin/sh
curl -d "param1=username¶m2=`grep -o '[0-9].*'`" http://somedomain.ru/index.php
Спасибо! Ваш вариант работает! В итоге я сделал так:
Код: Выделить всё
curl -d "param1=username¶m2=`curl ... | grep ... | grep -o '[0-9].*'`" http://somedomain.ru/index.php
Т.е.
curl читает страницу, страница проходит через двойной
grep и полученные данные подсовываются опять
curl'у.
Поставленная задача решена, а я уж хотел начать изучать
Python для этого

vaikos