LINUX.ORG.RU
ФорумAdmin

Алгоритм на Bash

 


0

1

Приветствую!

Знатоки Bash, вопрос к Вам!
Посоветуйте, как лучше реализовать на bash такой алгоритм:

Если во втором октете IP стоит 77, то присвоить hostname msk-srv-cn-01.

Объясняю, есть очень много серверов с произвольными хостнеймами, мне нужно привести их в порядок. Во втором октете IP адреса сервера всегда указан номер региона города в котором находится сервер.
К примеру Москва – 77 , значит хостнейм ставим msk-srv-cn-01 и так далее по аналогии.
Сейчас в голову приходит создать массив с регионами и хостнеймами и из него как-то дергать нужное. Либо использовать струтуру с if, elseif на 10000 строк… Направьте, может есть решение аккуратнее…


CODE=`echo $IP | cut -f2 -d.`
case "$CODE" in

 "1" )
 echo "tram-pam-pam-1"
 ;; 

 "2" )
 echo "tram-pam-pam-2"
 ;; 

 "77" )
 echo "msk"
 ;;

esac

Соответственно вместо echo делайте то, что вам нужно.

Ну и осталось только разобраться с какого числа идёт нумерация октетов, с 0 или 1, если с 1, то cut -f2, если с нуля, то cut -f3.

kostik87 ★★★★★
()

лучше реализовать логику на каком нибудь питоне, а потом через exec менять hostname

Сейчас в голову приходит создать массив с регионами и хостнеймами и из него как-то дергать нужное.

Лучше словарь.

Либо использовать струтуру с if, elseif на 10000 строк…

на костер!

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

регионов 87... Вот по этому и думаю как уменьшить ручную работу...

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

Ну тогда в отдельном файле с содержимым:

1:tram-param-1
2:tram-param-2
3:tram-param-3
...
77:msk
...
Делать выборку посредством grep и срезать второе поле тем же cut по разделителю ":" или любому другому. И собирать строку с именем хоста. Если нужно учитывать номер сервера, то либо завести переменную, либо выводить номер сервера в отдельный файл и считывать его оттуда.

kostik87 ★★★★★
()
Ответ на: комментарий от Dr0id
FILE=reg_host_list
CODE=`echo $IP | cut -f2 -d.`
REG=`grep $CODE $FILE | cut -f2 -d:`
echo "$REG"

reg_host_list:

1:tram-param-1
2:tram-param-2
3:tram-param-3
...
77:msk
...

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

А если у него не все регионы, а скажем с 1 по 10 есть, а потом только с 15 идёт. Нет, я не спорю, можно вставить пустые строки, но это тоже как-то всё через «девайс». Кроме всего прочего, срезать строку с определённым номером вы sed будете или чем ?

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

Все верно регионы не все. Поэтому cut вроде как удобно..

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