Страница 1 из 1

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

Добавлено: 2009-01-06 16:46:59
generik
Нужно на bash с файла login.conf выдергнуть значение SERVER_ID=

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

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

Добавлено: 2009-01-06 16:56:55
Alex Keda
пример файла

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

Добавлено: 2009-01-06 17:00:59
generik
lissyara писал(а):пример файла
Да вот стандартный файл /etc/login.conf В нем есть строка:

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

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

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

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

Добавлено: 2009-01-06 17:36:46
Alex Keda
awk может.
=========
вы хоть как-то пытались?

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

Добавлено: 2009-01-06 20:32:48
zg
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#
а дальше по обстоятельствам грепай чего надо -)))

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

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

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

Добавлено: 2009-01-06 21:46:17
Alex Keda
zg писал(а):
lissyara писал(а):awk может.
без кода это только слова -))) чтобы это утверждать нужен код на авк ;-)
человек не просил код.
он просил нужного направления.
код надо давать тока после того как просят именно его и пытаются хоть что-то сделать.

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

Добавлено: 2009-01-06 22:06:45
generik
спасибо всем, буду пробовать и учится.

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

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

Добавлено: 2009-01-06 22:37:11
Alex Keda
я тоже задаю здесь вопросы.
и ничего...

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

Добавлено: 2009-01-06 22:51:15
zg
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)

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

Добавлено: 2009-01-08 11:52:00
zg
Гость писал(а):в метке default:
если только в метке default, то можно и не геммороиться

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

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

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

Добавлено: 2009-01-09 10:28:21
generik
Огромное спасибо за помощь. Решение довольно не сложное как оказалось. Но моих скудных познаний не хватило что бы найти ответ самостоятельно.

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