Вопрос по bash

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Strik
Сообщения: 13

Вопрос по bash

Сообщение Strik »

Всем привет,

Вот часть скрипта:

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

for FOLDER in *; do
cd /var/user/$FOLDER
for FILE in `find /var/user/$FOLDER -type f \! -name '*,v' \! -name "$HOSTNAME"`; do
IP=`cat $FILE|grep ^ip|cut -f2 -d: -d" "`;
USER=`cat $FILE|grep user:|awk '{print $2}'`;

cat >> "/etc/web/host.conf" <<EOF
//сам шаблон который вставляется в файл на основе собранных данных
IP=$IP
USER=$USER
[...]
EOF


Интересует последняя часть которая вставляет собранные данные в host.conf, а именно нужно шаблон:

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

IP=$IP
USER=$USER
[...]


Вывести в отдельный файл, к которому можно будет обращаться. Пробовал, но ничего не получилось, вставлять вставляет но переменные не заменяются значениями.

Посоветуйте что-нибудь пожалуйста :unsure:
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вопрос по bash

Сообщение drBatty »

Strik писал(а):
03.07.2009 03:09
Вывести в отдельный файл

сначала выведете, а потом замените.
вроде
IP={IP}
USER={USER}
EOF
а потом
sed "s/{IP}/$IP/;s/{USER}/$USER/" -i /etc/web/host.conf
впрочем всё это можно сделать 2мя командами sed, первая выдирает из файла IP и USER, а вторая меняет это в шаблоне.
cat, grep, cut, awk тут не нужны.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Strik
Сообщения: 13

Re: Вопрос по bash

Сообщение Strik »

cat, grep, cut, awk в данном случае у меня достают нужную информацию из файлов панели управления (IP и прочее). Всё это в дальнейшем используется в файле host.conf, там для каждого пользователя генерится конфиг на основе шаблона. Шаблон выше я сильно сократил для того чтобы было поятнее - на самом деле сам шаблон выглядит примерно так:

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

############### $DOMAIN ###############
   server {
  listen $IP:80;
  server_name  $DOMAIN $ALIAS;

  location  ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|
midi|wav|bmp|rtf|js|swf|avi|mp3)$ {
    $ROOT;
    access_log off;
  }
  location ~ /\.ht {
        deny  all;
                         }
  location / {
   client_max_body_size    10m;
   client_body_buffer_size 128k;

   proxy_send_timeout   90;
   proxy_read_timeout   90;

   proxy_buffer_size    4k;
   proxy_buffers 80 32k;
   proxy_busy_buffers_size 64k;
   proxy_temp_file_write_size 64k;
   proxy_connect_timeout 10s;

   proxy_redirect off;

   proxy_pass   http://$IP:3000/;

   proxy_set_header   Host   \$host;
   proxy_set_header   X-Real-IP  \$remote_addr;
   proxy_set_header   X-Forwarded-For \$proxy_add_x_forwarded_for;
  }
 }


Всё что нужно, это вывести шаблон в отдельный файл (бывает часто нужно сделать изменения в нём, затем запустить скрипт ребилда). Также у скрипта несколько параметров, в каждом из них он используется - загонять его в EOF несколько раз не очень удобно, особенно когда нужно что-то изменить в шаблоне.

а потом
sed "s/{IP}/$IP/;s/{USER}/$USER/" -i /etc/web/host.conf


В принципе можно и так, но мне кажется что должно быть более простое этому решение...Поскольку пользователей много заменять в каждом случае переменные на значения будет долго...
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вопрос по bash

Сообщение drBatty »

Strik писал(а):
03.07.2009 03:58
cat, grep, cut, awk в данном случае у меня достают нужную информацию из файлов панели управления (IP и прочее).
ага. ИМХО проще их все заменить одной sed.
Strik писал(а):
03.07.2009 03:58
Всё что нужно, это вывести шаблон в отдельный файл

я и предлагаю, сделать отдельно скрипт, отдельно шаблон.
скрипт по шаблону будет делать новые конфиги для каждого пользователя.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
altwazar
Сообщения: 427
Статус: Zz
ОС: Calculate

Re: Вопрос по bash

Сообщение altwazar »

drBatty писал(а):
03.07.2009 13:14
Strik писал(а):
03.07.2009 03:58
cat, grep, cut, awk в данном случае у меня достают нужную информацию из файлов панели управления (IP и прочее).
ага. ИМХО проще их все заменить одной sed.

Лучше всем пользоваться, так скрипты понятнее будут.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вопрос по bash

Сообщение drBatty »

altwazar писал(а):
03.07.2009 13:51
Лучше всем пользоваться, так скрипты понятнее будут.

сложный вопрос...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: