Помогите с Linux BASH Shell

(Ответов: 8, Просмотров: 603)
  1. Дипломник
    • Регистрация: 16.04.2011
    • Сообщений: 150
    • Репутация: 48
    Здравствуйте!

    Знающие IT-специалисты подскажите с bash-скриптом. Не знаю синтаксиса, поэтому прошу помощи.

    Требуется найти и заменить значения всех ячеек в таблицах удовлетворяющих условию `id`='15'.
    Всё бы просто, но замену требуется провести во всех БД на сервере. Количество и названия БД неизвестны, поэтому, как я думаю, надо сделать запрос из под root-а

    PHP код:
    show database
    , а дальше циклом пробежаться по всем полученным БД и выполнить запрос:

    PHP код:
    UPDATE `tableSET `col`='value' WHERE `id`='15'
    Все БД, в которых требуется провести замену, начинаются в названии с "db".

    Скрипт будет запускаться из консоли, поэтому вариант реализации рассматриваю только через bash.

    Подскажите, пожалуйста.
    • 0
  2. Студент
    • Регистрация: 24.01.2013
    • Сообщений: 94
    • Репутация: 14
    • Webmoney BL: ?
    FullHouse, из консоли можно запускать скрипт, написанный на любом языке (PHP, Perl, JavaScript, Python и т.п.). Задача, стоящее перед вами вызывает удивление, т.к. не исключено что вы недопоняли задание.

    Вернусь к теме: реализацию напишите на любом известном Вам языке программирования, используя вложенные циклы (базы данных, таблицы баз).
    • 0
  3. Дипломник Аватар для PsyX
    • Регистрация: 17.12.2012
    • Сообщений: 160
    • Репутация: 19
    • Webmoney BL: ?
    FullHouse,во первых надо зайти в субд. если MySQL то
    mysql -u root -p жмем ентер, вводим пароль от рута. затем уже и остальные торты калякать. Не прощели через какой-нибудь phpmyadmin и подобные вещи сделать?
    • 0
  4. Дипломник
    • Регистрация: 16.04.2011
    • Сообщений: 150
    • Репутация: 48
    Цитата Сообщение от ap0stal Посмотреть сообщение
    FullHouse, из консоли можно запускать скрипт, написанный на любом языке (PHP, Perl, JavaScript, Python и т.п.). Задача, стоящее перед вами вызывает удивление, т.к. не исключено что вы недопоняли задание.
    Спасибо! Но это вы недопоняли задание - мне надо bash, а не костыли через php или js - у меня не сервер node.

    Цитата Сообщение от ap0stal Посмотреть сообщение
    Вернусь к теме: реализацию напишите на любом известном Вам языке программирования, используя вложенные циклы (базы данных, таблицы баз).
    Не думал, что меня будут убеждать сделать по-другому - скрипт будет решать не только данную задачу. Переписать значение ячеек это только часть кода.
    Конечно можно придумывать костыли и запускать через bash - php, но это некрасиво и убого.

    Цитата Сообщение от PsyX Посмотреть сообщение
    FullHouse,во первых надо зайти в субд. если MySQL то
    mysql -u root -p жмем ентер, вводим пароль от рута. затем уже и остальные торты калякать.
    Спасибо, я знаю как подключиться к серверу mysql из консоли - вопрос в том, как сделать выбору и цикл по ней?

    Цитата Сообщение от PsyX Посмотреть сообщение
    Не прощели через какой-нибудь phpmyadmin и подобные вещи сделать?
    Нет, через phpMyAdmin абсолютно ни чем не проще, так как всё его отличие от консоли - это графическая оболочка.
    • 0
  5. Дипломник
    • Регистрация: 16.04.2011
    • Сообщений: 150
    • Репутация: 48
    Решение на PHP, может кому пригодится:

    PHP код:
        $link mysql_connect('localhost''root''password');
        
    $res mysql_query("SHOW DATABASES");

        
    $i 0;
        
    $db = Array();

        while (
    $row mysql_fetch_assoc($res)) {
            if (
    strstr($row['Database'], 'db'))
            {
                
    $db[$i] = $row['Database'];
                
    $i++;
            }
        }

        foreach (
    $db as $key => $value) {
            
    mysql_select_db($value);
            
    $query "UPDATE `table` SET `col`='value' WHERE `id`='15'";
            
    $result mysql_query($query);
            echo 
    $value.' &mdash; OK<br />';
        } 
    Вопрос всё ещё в силе.
    • 0
  6. Студент
    • Регистрация: 09.10.2007
    • Сообщений: 99
    • Репутация: 88
    • Webmoney BL: ?
    echo "show databases" | /path/to/mysql -u root --password="mysql root pw" | sed -e 's/^/update \`/' | sed -e 's/$/.table\` set col="value" where id=15/' | /path/to/mysql -u root --password="mysql root pw"

    минусы - не секурно. рутовский пароль в командной строке - не комильфо. но по другому вашу задачу не решить
    • 1

    Спасибо сказали:

    FullHouse(17.04.2014),
  7. Дипломник
    • Регистрация: 16.04.2011
    • Сообщений: 150
    • Репутация: 48
    Спасибо! Сейчас попробуем.
    • 0
  8. Студент
    • Регистрация: 24.01.2013
    • Сообщений: 94
    • Репутация: 14
    • Webmoney BL: ?
    Конечно можно придумывать костыли и запускать через bash - php, но это некрасиво и убого.
    Вы, похоже, не совсем хорошо представляете предметную область, ошибочно полагая, что PHP это костыли, а баш:
    Код:
    echo "show databases" | /path/to/mysql -u root --password="mysql root pw" | sed -e 's/^/update \`/' | sed -e 's/$/.table\` set col="value" where id=15/' | /path/to/mysql -u root --password="mysql root pw"
    это образец наиправильнейшего решения

    Открою Вам секрет, что "из коробки" существует возможность писать идеологически верные скрипты, запускаемые из терминала. Погуглите PHP CLI.
    • 0
  9. Новичок
    • Регистрация: 07.12.2013
    • Сообщений: 25
    • Репутация: 2
    зачем усложнять? adminer, Не?
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Bash in Quote - Парсер цитат bash.im [3$]
Софт, скрипты, лицензии 17 18.04.2013 17:23
SEO и Linux
Вопросы от новичков 7 07.08.2012 12:34
Небольшой движок a-la bash.org.ru
Web программирование 4 15.12.2011 02:21
Обнаружен shell залитый в NetCet
Web программирование 9 09.12.2011 16:14
Помощь по Linux
Хостинг и Серверы 0 12.11.2011 01:13

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры