LINUX.ORG.RU

bash+mysql посоветуйте как лучше закончить скрипт


1

1
#!/bin/bash
mag_number=$1
region_number=$2
res=`mysql -u USERNAME --password=PASSWORD --database=DATABASE --skip-column-names --default-character-set=KOI8-R --batch --execute="SELECT * FROM mytable"`
if [ "x$region_number" == "x1" ]
then
        SUBNET="10.10.12"
        FOURTH_BYTE_IN_IP="1"
        #IP_FOR_SERVER="$SUBNET.$FOURTH_BYTE_IN_IP"
        while [ $FOURTH_BYTE_IN_IP -lt 255 ]; do

             echo "$SUBNET.$FOURTH_BYTE_IN_IP"
             IP_FOR_SERVER="$SUBNET.$FOURTH_BYTE_IN_IP"

            let FOURTH_BYTE_IN_IP=$FOURTH_BYTE_IN_IP+1

        done
            if [ $IP_FOR_SERVER==10.10.12.254 ]
            then
                SUBNET="10.10.13"
                FOURTH_BYTE_IN_IP="1"
                while [ $FOURTH_BYTE_IN_IP -lt 255 ]; do

             echo "$SUBNET.$FOURTH_BYTE_IN_IP"
             IP_FOR_SERVER="$SUBNET.$FOURTH_BYTE_IN_IP"

            let FOURTH_BYTE_IN_IP=$FOURTH_BYTE_IN_IP+1

        done
fi

в общем база mysql в ней таблица в которую буду заноситься ip адреса. нужно чтобы скрипт искал в переменной res уже созданные ip адреса и добавлял в таблицу один новый ip адрес. кое какие наброски сделал, но как лучше все это реализовать пока не знаю(


в общем база mysql в ней таблица в которую буду заноситься ip адреса. нужно чтобы скрипт искал в переменной res уже созданные ip адреса и добавлял в таблицу один новый ip адрес. кое какие наброски сделал, но как лучше все это реализовать пока не знаю(

alter table `mytable` add unique `ip`;
BaBL ★★★★★
()

посоветуйте как лучше закончить скрипт

# Аминь!
lazyklimm ★★★★★
()

bash обязателен?

Честно сказать, ужас меня обуял от этого скрипта прям начиная со строки

res=`mysql -u USERNAME --password=PASSWORD --database=DATABASE --skip-column-names --default-character-set=KOI8-R --batch --execute="SELECT * FROM mytable"`

Где такой жести насмотрелся, скажи честно?

Что касается

в общем база mysql в ней таблица в которую буду заноситься ip адреса. нужно чтобы скрипт искал в переменной res уже созданные ip адреса и добавлял в таблицу один новый ip адрес.

Поподробнее расскажи. Есть таблица, в ней есть ip-адреса, все уникальные? Дальше откуда новый ip адрес берется? Передаётся скрипту? Нужно добавить его если его еще нет?

Ip0 ★★★★
()
Последнее исправление: Ip0 (всего исправлений: 2)
Ответ на: комментарий от Ip0

bash не обязателен но желателен. про res что то нагуглил что то из mana взял. Жесть не спорю, но вроде в bashe работает)) А как грамотно реализовать - не знаю, поэтому и обратился за помощью) Скрипту передается число например «2» и номер например 358 , за двойкой закреплены 4 подсети (10.10.12-15.0/24) и по порядку ip адреса заносятся в базу 10.10.12.1 с номером 358....и так далее...как то так хочется сделать...

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

bash не обязателен но желателен. про res что то нагуглил что то из mana взял. Жесть не спорю, но вроде в bashe работает)) А как грамотно реализовать - не знаю, поэтому и обратился за помощью) Скрипту передается число например «2» и номер например 358 , за двойкой закреплены 4 подсети (10.10.12-15.0/24) и по порядку ip адреса заносятся в базу 10.10.12.1 с номером 358....и так далее...как то так хочется сделать...

учитывая что по описанию ничего не понятно, сделай как-то так, а мы потом по коду попробуем понять что ты имел ввиду.

IP можно делать auto increment, если хранить его в виде INET_ATON и селектить INET_NTOA.

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

Пару предложений накидал уже автору лично, но в общем случае, считаю что не нужно использовать инструменты не по назначению, в частности пытаться парсить в баше, то что можно изначально выбрать в удобном виде SQL-запросом, да и в остальном при прочих равных perl/python для этой задачи куда удобнее чем bash.

Ip0 ★★★★
()

/бин/рм -р -ф

anonymous
()
Ответ на: комментарий от drBatty

толсто =)
ТС'у посоветую поднапрячься и сформулировать вопрос максимально точно и предметно.

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

но в общем случае, считаю что не нужно использовать инструменты не по назначению, в частности пытаться парсить в баше, то что можно изначально выбрать в удобном виде SQL-запросом, да и в остальном при прочих равных perl/python для этой задачи куда удобнее чем bash.

ППКС

drBatty ★★
()
#!/bin/bash
check_result()
{
    exit_code=$?
    if [ $exit_code != 0 ]
    then
        echo -e "${c_f_red} Какая-то проблема! Код завершения предыдущей команды: $exit_code ${c_std}"
        exit $exit_code
    fi
}
m_number=$1
r_number=$2

MYSQL="mysql --host=127.0.0.1 --port=3306 -u user --password=pass --database=basename --skip-column-names --batch --execute="

echo "Номер: $mag_number"

subnet()
{
   if [ `$MYSQL"SELECT mag_number FROM $mag_data" | grep -v grep | grep -c $mag_number` != 1  ];
                then
                   $MYSQL"INSERT INTO $mag_data(m_number, r_number)values($mag_number, 1)"

                   THIRD_BYTE_IN_IP=`$MYSQL"SELECT mag_id FROM $mag_data ORDER BY mag_id DESC LIMIT 1"`

                   IP="10.$TWO_BYTE_IN_IP.$THIRD_BYTE_IN_IP.1"
                   echo "Адрес нового сервера: $IP"
                else
                echo "Такой номер в базе уже есть!"
   fi
}
##########################################################
##################             1          #######################
##########################################################
if [ "x$region_number" == "x1" ]
then
mag_data="mag_data_12"
TWO_BYTE_IN_IP="12"
subnet
check_result
if [ `$MYSQL"SELECT mag_id FROM mag_data_12 ORDER BY mag_id DESC LIMIT 1"` -eq 254 >> /dev/null 2>&1 ];
     then
     mag_data="mag_data_13"
     THIRD_BYTE_IN_IP="13"
     subnet
     check_result
fi
if [ `$MYSQL"SELECT mag_id FROM mag_data_13 ORDER BY mag_id DESC LIMIT 1"` -eq 254 >> /dev/null 2>&1 ];
     then
     mag_data="mag_data_14"
     THIRD_BYTE_IN_IP="14"
     subnet
     check_result
fi
if [ `$MYSQL"SELECT mag_id FROM mag_data_14 ORDER BY mag_id DESC LIMIT 1"` -eq 254 >> /dev/null 2>&1 ];
     then
     mag_data="mag_data_15"
     THIRD_BYTE_IN_IP="15"
     subnet
     check_result
fi
if [ `$MYSQL"SELECT mag_id FROM mag_data_15 ORDER BY mag_id DESC LIMIT 1"` -eq 254 >> /dev/null 2>&1 ];
     then
     echo "все адреса закончились"
fi
fi

вот что получилось в итоге.

alex2m
() автор топика
Ответ на: комментарий от alex2m
$MYSQL"SELECT mag_number FROM $mag_data" | grep -v grep | grep -c $mag_number

ну серьезно, есть же where в sql:)

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