Выполнение Shell-сриптов в Perl

Модератор: Модераторы разделов

Аватара пользователя
skeletor
Сообщения: 1224

Выполнение Shell-сриптов в Perl

Сообщение skeletor »

Есть скрипт на perl. Где-то в средине скрипта нужно выполнить команду, точнее получить вывод от команды

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

ID=`echo "select * from TABLE where FIELD like '%$1%'" | mysql DB_NAME -uDB_USER -pUSER_PASS | grep -v id`

то есть, использовать результат переменной ID дальше в скрипте. Пробовал использовать system, но куда она возвращает результат?
Спасибо сказали:
Аватара пользователя
brandy
Сообщения: 41
ОС: Gentoo

Re: Выполнение Shell-сриптов в Perl

Сообщение brandy »

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

use strict;
my $id=`echo \"select * from TABLE where FIELD like '%$1%'\" | mysql DB_NAME -uDB_USER -pUSER_PASS | grep -v id`;
print "result is: $id";
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Выполнение Shell-сриптов в Perl

Сообщение allez »

Вы вполне можете использовать в перловом скрипте обратные кавычки или оператор qx().
Спасибо сказали:
Аватара пользователя
brandy
Сообщения: 41
ОС: Gentoo

Re: Выполнение Shell-сриптов в Perl

Сообщение brandy »

И еще: $1 - с этим поэксперементируйте, и возможно еще что-то кроме символа " придется экранировать в виде \"
Спасибо сказали:
Serik
Сообщения: 149
ОС: SuSE Linux

Re: Выполнение Shell-сриптов в Perl

Сообщение Serik »

Для такой команды имхо лучше подключиться к БД и нормально выполнить все что нужно.
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Выполнение Shell-сриптов в Perl

Сообщение skeletor »

brandy, allez не работают :(.

Serik Это всё хорошо, но мне нужно ещё и отфильтровать вывод запроса. Как мне это сделать? Как потом прикрутить контейнером grep?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Выполнение Shell-сриптов в Perl

Сообщение diesel »

а почему DBI не использовать??? perl'ом можно сделать все что умеет делать grep .....
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Выполнение Shell-сриптов в Perl

Сообщение skeletor »

А не могли бы помочь написать скрипт?
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

Re: Выполнение Shell-сриптов в Perl

Сообщение sarutobi »

skeletor
поясните пожалуйста что именно вы хотите сделать. Обычно работа с БД идет через API БД, предоставляемого языком (для PERL - DBI + DBD),
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Выполнение Shell-сриптов в Perl

Сообщение skeletor »

Суть такова : скрипт меняет пароль юзера в БД. Сначало вычисляю ID юзера, затем по нужному ID меняем ему пароль в базе.

ПС. У меня не установлены perl-модуль DBI. Как его установить?
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

Re: Выполнение Shell-сриптов в Perl

Сообщение sarutobi »

установить можно через менеджер пакетов - этот модуль присутсвует во всех дистрибутивах. Кроме него потребуется модуль DBD для соответсвующей базы (mysql в Вашем случае)
если логин уникальный (судя по приведенному запросу) то выполнение поставленной задачи сводится к запросу

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

update table set password='NEWPASS' where LOGIN='login'

Вы используете в запросе Like 'login' - это излишняя нагрузка на сервер и потенциальная дыра в безопасности (для конкретно этой задачи), используйте прямое сравнение.
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Re: Выполнение Shell-сриптов в Perl

Сообщение minoru-kun »

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

use DBI; #зависит от libdbi-perl
use DBD::mysql;

$dbh = DBI -> connect ("dbi:mysql:dbname[:host]", "$db_username", "$db_password); #начинаем SQL-транзакцию
<...>
$dbh -> do ("update table set password='$new_password' where LOGIN='$login'");
<...>
$dbh -> disconnect();

Только давай договоримся, что не будем создавать по транзакции на каждый запрос, хорошо? :)
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Выполнение Shell-сриптов в Perl

Сообщение skeletor »

Разобрался! Всем спасибо.
Спасибо сказали: