Page 1 of 9 123 ... LastLast
Results 1 to 15 of 127

Thread: Вопросы по скриптам на bash (shell)

  1. #1
    Join Date
    Aug 2006
    Location
    Moscow, Russia
    Posts
    788

    Question Вопросы по скриптам на bash (shell)

    Народ, кому не лень, проверьте работает ли у вас на роутере команда
    Code:
    echo "qwerty[i]" | /usr/bin/tr '[' ' '
    или только у меня вылетает с segmentation fault?

  2. #2
    Quote Originally Posted by Mam(O)n View Post
    Народ, кому не лень, проверьте работает ли у вас на роутере команда
    Code:
    echo "qwerty[i]" | /usr/bin/tr '[' ' '
    или только у меня вылетает с segmentation fault?
    вылетает как и у вас

  3. #3
    Join Date
    Aug 2006
    Location
    Moscow, Russia
    Posts
    788
    Замечательно... Точнее ничего замечательного нет. Придется теперь скрипты под sed переписывать ((
    cyrax, спасибо за информацию.

  4. #4
    Quote Originally Posted by Mam(O)n View Post
    Замечательно... Точнее ничего замечательного нет. Придется теперь скрипты под sed переписывать ((
    cyrax, спасибо за информацию.
    Да незачто. Похоже что tr не переваривает [ ни в каком виде.
    Могу помочь с sed / awk если что

  5. Быстродействие или вопрос об оптимизации.

    Вопрос оптимизации.

    Имеется роутер WL500GP - самый быстрый в семействе, но далеко не каждое подобное устройство сможет конкурировать с настольным компьютером или ноутбуком в производительности. Поэтому важно "правильно" написать скрипт.

    Понимаю что написание скриптов на shell большое искусство. Только знание и опыт могут превратить "километровый" код в "две строки" кода дающие тот же результат.

    Первая задача - условно "найти различия".
    Привожу пример скрипта (Листинг 1) который находит различия в двух списках и помещает её в файлы. Время выполнения скрипта на роутере WL500GP составляет - 240 секунд.

    Code:
    Листинг 1.
    
    F_DIFF_LIST ()
    {
    cat /dev/null > $LIST_DEL
    while read STR_OLD
    do
    grep -q $STR_OLD $LIST_NEW
    if [ $? -eq 1 ]
        then
                echo "$STR_OLD" >> $LIST_DEL
    fi
    done <$LIST_OLD
    
    cat /dev/null > $LIST_ADD
    while read STR_ADD
    do
    grep -q $STR_NEW $LIST_OLD
    if [ $? -eq 1 ]
        then
                echo "$STR_OLD" >> $LIST_DEL
    fi
    done <$LIST_NEW
    }
    Скрипт (Листинг 2) выполняет тоже самое, но выполняет это за 2 секунды.
    Используется diff из diffutils - в результате существенная разница!!!
    Задача выполнена.

    Code:
    Листинг 2.
    
    F_DIFF_LIST ()
    {
    diff -a $LIST_NEW $LIST_OLD | grep ">" | awk '{ print $2 }' > $LIST_ADD
    diff -a $LIST_NEW $LIST_OLD | grep "<" | awk '{ print $2 }' > $LIST_DEL
    }
    Вторая задача - условно "маршрутизация".
    Скрипт (Листинг 3) выполняется 150 секунд - долго!!!
    Выполненение задачи???

    Code:
    Листинг 3.
    
    F_ROUTE_UAIX ()
    {
    while read IPUAIX
    do
    echo "$IPUAIX" | grep -q "/"
    if [ $? -eq 0 ]
        then
    	/sbin/route $PARAM -net $IPUAIX gw $GATEWAY
        else
    	/sbin/route $PARAM -net $IPUAIX/$DEF_MASK gw $GATEWAY
    fi
    done <$UALIST
    }
    Подскажите как правильно написать скрипт "Листинг 3" чтобы он выполнялся быстрее.

    ---

  6. #6
    непонятно с какого хобота им выполнятся по две три минуты .

    Что на фход то подается ? какие структуры ?

  7. Quote Originally Posted by owld View Post
    непонятно с какого хобота им выполнятся по две три минуты .

    Что на фход то подается ? какие структуры ?
    ---

    Долго потому в файле $UALIST (он же ua-list.txt - прикреплен ниже) список из более чем 1800 сетей.

    ---

    Подробно:

    Роутер подключен к кабельному модему. Получает IP от DHCP провайдера №1. Поднимает VPN - провайдер №2. Понимает стену для разруливания трафика соглано списка $UALIST.

    Переменные:

    $UALIST - список IP адресов сетей входящих в UA-IX (файл ua-list.txt без 4-х верних строк)
    $LIST_OLD - IP адреса предыдущего списка маршрутизации (старый $UALIST)
    $LIST_NEW - IP адреса для текущего списка маршрутизации (новый $UALIST)
    $LIST_DEL - IP адреса удалемые из списка маршрутизации (чтоб не переписывать весь список)
    $LIST_ADD - IP адреса добавляемые к списку маршрутизации (чтоб не переписывать весь список)
    $PARAM - опция "add" или "del"
    $GATEWAY - шлюз провайдера №1 для текущего соединения
    $DEF_MASK - маска по умолчанию

    Список сетей входящих в UA-IX (файл ua-list.txt) переодически обновляеться (раз в 15 мин.). Количество сетей заметно растёт и за 1 год вырос придлизительно на 600 сетей.

    При текущем количестве сетей (>1800) скрипт (Листинг 3) выполняется 150 секунд. При поднятии стены прописываеться полный список, а в последующем только разница. Пока время в 150 секунд - терпимо, а дальше? (список то растёт!!!)

    Ести ли варианты прописать таблицу (список) маршрутизации быстрее???

    ---
    Attached Files Attached Files

  8. #8
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,356
    А bash пробовали использовать в качестве шелла?
    В общем, чтобы было быстро, нужно написать на Си загрузку маршрутов...

  9. #9
    Join Date
    Aug 2006
    Location
    Moscow, Russia
    Posts
    788
    Quote Originally Posted by Andromedaland View Post
    Подскажите как правильно написать скрипт "Листинг 3" чтобы он выполнялся быстрее.
    Попробуй, может awk быстрее будет обрабатывать. А самое лучшее решение - писать на C.
    Code:
    cat $UALIST | awk -F "/" -v PARAM=$PARAM -v GATEWAY=$GATEWAY -v DEF_MASK=$DEF_MASK '
        /^[0-9].*/{
            if ($2 != "") {
                system("/sbin/route " PARAM " -net " $0 " gw " GATEWAY);
            } else {
                system("/sbin/route " PARAM " -net " $1 "/" DEF_MASK " gw " GATEWAY);
            }
        }'
    Last edited by Mam(O)n; 01-06-2007 at 12:22. Reason: очепятка в DEF_MASK. неузрел знак "_"

  10. ---

    Благодарю.

    Обязательно попробую с awk, если не поможет тогда пойду на "бинарный уровень".

    ---

  11. Попробуй, может awk быстрее будет обрабатывать.
    ---

    Код с awk - время выполнения 105 секунд (1829 сетей).
    105 с. < 150 с.
    Лучше. Позже попробую на Си.

    ---

  12. #12
    Докучи еще можно попробовать накатить перл и попробовать на нем. Может быстрее awk будет.

  13. Quote Originally Posted by Duke View Post
    Докучи еще можно попробовать накатить перл и попробовать на нем. Может быстрее awk будет.
    ---

    Посмотрел исходник route.c - использование bash, awk, perl ... не даст требуемой эфективности. Нужно писать свой sroute (stream route).

    ---

  14. #14
    Вообще в свежих версиях iproute2 команда ip имеет опцию -batch file, позволяющую за один вызов выполнить произвольное количество команд. Но в прошивке сейчас слишком старая версия, которая этого не умеет.

  15. #15

    скрипт замены адресов в логе

    Дано:
    Имеется файл, в котором записаны айпишники и названия узлов, например так:
    88.88.88.88 RABOTA
    77.77.77.77 FRIEND
    11.11.11.11 CHINEESE_HACKER
    Требуется:
    Скрипт, который периодически просматривает системный лог и заменяет в нём эти айпишники на указанные названия из файла.

    Скрипт планирую запускать через cron.
    Если нужно, то структуру файла с названиями можно поменять.

    Подскажите как сделать?

Page 1 of 9 123 ... LastLast

Similar Threads

  1. FAQ: часто задаваемые вопросы
    By Oleg in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 56
    Last Post: 13-09-2016, 13:06
  2. Вопросы по работе IPTV (EMF & WMF)
    By theMIROn in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 119
    Last Post: 29-03-2015, 14:18
  3. Вопросы по работе PHP на роутере
    By Jekl in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 164
    Last Post: 21-10-2014, 13:45
  4. Wifi connect client bash script export.
    By aegisrtcw in forum WL-500gP Q&A
    Replies: 0
    Last Post: 25-04-2012, 06:36
  5. Вопросы по перепрошивке dir-320
    By gweri in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 344
    Last Post: 29-10-2011, 11:36

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •