Получить значение

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
generik
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-08-08 10:29:43

Получить значение

Непрочитанное сообщение generik » 2009-01-06 16:46:59

Нужно на bash с файла login.conf выдергнуть значение SERVER_ID=

Кто подскажет как оно делается?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Получить значение

Непрочитанное сообщение Alex Keda » 2009-01-06 16:56:55

пример файла
Убей их всех! Бог потом рассортирует...

generik
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-08-08 10:29:43

Re: Получить значение

Непрочитанное сообщение generik » 2009-01-06 17:00:59

lissyara писал(а):пример файла
Да вот стандартный файл /etc/login.conf В нем есть строка:

:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES,SERVER_ID=00001:\

И там есть как бы ее правильно обозвать переменная SERVER_ID=00001.

Нужно найти и вот ети циферки что бы использовать дальше в скрипте

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Получить значение

Непрочитанное сообщение Alex Keda » 2009-01-06 17:36:46

awk может.
=========
вы хоть как-то пытались?
Убей их всех! Бог потом рассортирует...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Получить значение

Непрочитанное сообщение zg » 2009-01-06 20:32:48

generik писал(а):Да вот стандартный файл /etc/login.conf В нем есть строка:

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

zg# cat 1.awk
#!/usr/bin/awk -f
{
  if ( match($1, /^#/) ) next;
  gsub(/^\s+/, "", $0);
  if ( !$0 ) next;

  a=a$0;

  if (match($0, /\\$/) == 0)
  {
    gsub(/\\[\s\t]*/, "", a);
    gsub(/:$/, "", a);
    gsub(/::/, ":", a);
    print a;
    a="";
  }
}
zg#

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

zg# ./1.awk /etc/login.conf
default:passwd_format=md5:copyright=/etc/COPYRIGHT:welcome=/etc/motd:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin ~/bin:nologin=/var/run/nologin:cputime=unlimited:datasize=unlimited:stacksize=unlimited:memorylocked=unlimited:memoryuse=unlimited:filesize=unlimited:coredumpsize=unlimited:openfiles=unlimited:maxproc=unlimited:sbsize=unlimited:vmemoryuse=unlimited:priority=0:ignoretime@:umask=022
tandard:tc=default
xuser:tc=default
taff:tc=default
daemon:tc=default
news:tc=default
dialer:tc=default
root:ignorenologin:tc=default
russian|Russian Users Accounts:charset=KOI8-R:lang=ru_RU.KOI8-R:tc=default
zg#
а дальше по обстоятельствам грепай чего надо -)))

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Получить значение

Непрочитанное сообщение zg » 2009-01-06 20:52:01

lissyara писал(а):awk может.
без кода это только слова -))) чтобы это утверждать нужен код на авк ;-)

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Получить значение

Непрочитанное сообщение Alex Keda » 2009-01-06 21:46:17

zg писал(а):
lissyara писал(а):awk может.
без кода это только слова -))) чтобы это утверждать нужен код на авк ;-)
человек не просил код.
он просил нужного направления.
код надо давать тока после того как просят именно его и пытаются хоть что-то сделать.
Убей их всех! Бог потом рассортирует...

generik
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-08-08 10:29:43

Re: Получить значение

Непрочитанное сообщение generik » 2009-01-06 22:06:45

спасибо всем, буду пробовать и учится.

Если бы я обладал знаниями, я бы не читал подобные форумы и не задавл здесь вопросов.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Получить значение

Непрочитанное сообщение Alex Keda » 2009-01-06 22:37:11

я тоже задаю здесь вопросы.
и ничего...
Убей их всех! Бог потом рассортирует...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Получить значение

Непрочитанное сообщение zg » 2009-01-06 22:51:15

lissyara писал(а):человек не просил код.
он просил нужного направления.
generik писал(а):Нужно на bash с файла login.conf выдергнуть значение SERVER_ID=

Кто подскажет как оно делается?
на вопрос как, должен быть ответ вот так -)))

да и сам по себе ответ
lissyara писал(а):awk может.
предполагает последующий пример с решением, потому что в противном случае никто не доказал, что авк действительно это может :cf: . К примеру, с помощью седа я так и не смог реализовать, упёрся в перевод строки, да и авк мало подходит для такой обработки. По-хорошему тут нужен перл.

Гость
проходил мимо

Re: Получить значение

Непрочитанное сообщение Гость » 2009-01-08 6:32:26

generik писал(а):Да вот стандартный файл /etc/login.conf В нем есть строка:

:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES,SERVER_ID=00001:\

И там есть как бы ее правильно обозвать переменная SERVER_ID=00001.

Нужно найти и вот ети циферки что бы использовать дальше в скрипте
в метке default:

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

sed -n 's/\s*#.*//; /^\s*$/d; /default:/,/:.*:$/s/.*,SERVER_ID=\([[:digit:]]*\).*/\1/p' /etc/login.conf
во всем файле:

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

sed -n 's/\s*#.*//; /^\s*$/d; s/.*,SERVER_ID=\([[:digit:]]*\).*/\1/p' /etc/login.conf
если \s не заработает, то поменяй на более портабельный [[:space:]]

только зачем скриптом соскрибать значение переменной окружения из login.conf? не проще ли воспользоваться ей (переменной) напрямую?
вместо

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

#! /bin/sh

id=$(sed -n 's/\s*#.*//; /^\s*$/d; /default:/,/:.*:$/s/.*,SERVER_ID=\([[:digit:]]*\).*/\1/p' /etc/login.conf)
использовать

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

#! /bin/sh

id=$SERVER_ID
или использовать login.conf только в случае, если $SERVER_ID в окружении пустая:

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

#! /bin/sh

id=${SERVER_ID:-$(sed -n 's/\s*#.*//; /^\s*$/d; /default:/,/:.*:$/s/.*,SERVER_ID=\([[:digit:]]*\).*/\1/p' /etc/login.conf)}
впрочем, лучше все-таки придерживаться лимита в 80 символов на строке

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

#! /bin/sh

id=${SERVER_ID:-$(sed '#n
        s/\s*#.*//
        /^\s*$/d
        /default:/,/:.*:$/ {
            s/.*,SERVER_ID=\([[:digit:]]*\).*/\1/p
        }' /etc/login.conf
)}
cf. environ(7)

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Получить значение

Непрочитанное сообщение zg » 2009-01-08 11:52:00

Гость писал(а):в метке default:
если только в метке default, то можно и не геммороиться

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

zg# awk '/^default:/,/[^#]+:\s*$/' /etc/login.conf | grep -Eo 'umask=[0-9]+'
umask=022
zg#

generik
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-08-08 10:29:43

Re: Получить значение

Непрочитанное сообщение generik » 2009-01-09 10:28:21

Огромное спасибо за помощь. Решение довольно не сложное как оказалось. Но моих скудных познаний не хватило что бы найти ответ самостоятельно.

Еще раз всем спасибо за помощь.