The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Шаблонизатор на shell
Часто для целей серверной автоматизации требуется генерация конфигурационных файлов.

Предлагается использовать для этих целей следующую shell-конструкцию

*BSD:

   #!/bin/sh
   config_file='test.conf'
   template_file='mytemplate'
   myvar1='variable 1'
   template=`cat ${template_file}`
   eval "echo \"${template}\"" > ${config_file}


Linux:

   #!/bin/bash
   config_file='test.conf'
   template_file='mytemplate'
   myvar1='variable 1'
   template=`cat ${template_file}`
   eval "echo \"${template}\"" > ${config_file}

Переменная template_file содержит путь к шаблону, остальные переменные - данные для шаблона. 
Последная строчка - ничто иное, как "движок" шаблонизатора, eval-вычисление строки-шаблона.

Пример шаблона:

   myvar = ${myvar1}
   this is a \" quotes test \"
   $(
    if [ ! -z ${myvar2} ]; then
     echo "myvar2 is set and its value = ${myvar2}"
    fi
   )
   
Важно отметить, что в шаблоне следует экранировать кавычки.
В шаблоне можно использовать не только подстановки значений, но и управляющие конструкции, 
заключенные в скобки (см. пример шаблона).
 
13.05.2009 , Автор: Denis Nasyrtdinov , Источник: http://diso-go-go.livejournal.com...
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, pavlinux, 01:39, 14/05/2009 [ответить] [смотреть все]
  • +/
    Какую-то х...ню накопипастили, сами-то
    проверяли...

    > eval "echo \"${template}\"" > ${config_file}

    ambiguous redirect

    > this is a \" quotes test \"

    Это что за команда...

    Макс удаляй нафиг, лажу копируют сюда!!!

     
     
  • 2.2, Гость, 07:41, 14/05/2009 [^] [ответить] [смотреть все]
  • +/
    все работает на ура, единственно что переменную указать config_file='test.conf'
     
  • 2.3, stellar, 10:55, 14/05/2009 [^] [ответить] [смотреть все]
  • +/
    not for lame users only (c)
     
  • 2.4, Maxim Chirkov, 11:01, 14/05/2009 [^] [ответить] [смотреть все]
  • +/
    >[оверквотинг удален]
    >проверяли...
    >
    >> eval "echo \"${template}\"" > ${config_file}
    >
    >ambiguous redirect
    >
    >> this is a \" quotes test \"
    >
    >Это что за команда...
    >Макс удаляй нафиг, лажу копируют сюда!!!

    Это не команда, это текст из файла с темплейтом. отсутствие определения переменной config_file поправил. Очень полезный совет, побольше бы таких присылали.


     
     
  • 3.5, Denis Nasyrtdinov, 11:40, 14/05/2009 [^] [ответить] [смотреть все]
  • +/
    Спасибо за правку моего текста. Не стоило так торопиться при наборе )
    Скоро, если не поленюсь, отправлю еще пару наработок по FreeBSD
     
  • 1.6, XoRe, 12:49, 14/05/2009 [ответить] [смотреть все]  
  • +/
    Не понял цели.
    Можно пример применения?
     
     
  • 2.7, Andrey Mitrofanov, 13:05, 14/05/2009 [^] [ответить] [смотреть все]  
  • +/
    >Не понял цели.
    >Можно пример применения?

    Ну, это что-то типа того, что обычно делается другими средствами... Вроде

    sed <file.template >file.new "s/@@VAR1@@/$VAR1/g; s/@@VAR2@@/$VAR2/g;"

    или

    ---8<--- /etc/init.d/bootmisc.sh, фрагмент
    # Update motd
    uname -snrvm > /var/run/motd
    [ -f /etc/motd.tail ] && cat /etc/motd.tail >> /var/run/motd

     
     
  • 3.8, Аноним, 22:45, 14/05/2009 [^] [ответить] [смотреть все]  
  • +/
    я уже лет 5 на шелле рисую в последние два года много и часто, но не понял идеи... весь текст скрыт [показать]
     
     
  • 4.9, Andrey Mitrofanov, 10:24, 15/05/2009 [^] [ответить] [смотреть все]  
  • +/
    >я уже лет 5 на шелле рисую

    Попробуй читать чужие "рисунки"... "./configure", "make" и проч. -- не-е-епонятнейшие "головоломки". :>

    > но не понял идеи поста:)

    Моего? Одной из 6 других реплик? <<Полезного совета>>? Своего?? Раскажите об этом подробнее.

     
  • 1.10, Andrey Mitrofanov, 10:47, 15/05/2009 [ответить] [смотреть все]  
  • +/
    >[оверквотинг удален]
    >Пример шаблона:
    >
    >   myvar = ${myvar1}
    >   this is a \" quotes test \"
    >   $(
    >    if [ ! -z ${myvar2} ]; then
    >     echo "myvar2 is set and its value
    >= ${myvar2}"
    >    fi
    >   )

    ---8<---
    #!/bin/bash
    config_file='test.conf'
    myvar1='variable 1'
    cat <<TPLT > ${config_file}
    myvar = ${myvar1}
    this is a " quotes test "
    $(
    if [ ! -z ${myvar2} ]; then
      echo "myvar2 is set and its value = ${myvar2}"
    fi
    )
    TPLT
    --->8---

    1. Одним файлом: шаблон как here-document в скрипте.
    2. Кавычки не нужно экранировать. Нужно экранировать '$', если на выходе нужен сам этот символ.
    3. У неортодоксальных нерелигиозных нефанатиков, освоивших установку $чего-то-там-про-пакеты, bash бывает и _не_ на ОС GNU/Linux (впрочем, как и не на ядре linux). Впрочем, безусловно, такие исключения только подтверждают правило, ога.

     
  • 1.11, keeper, 11:48, 18/05/2009 [ответить] [смотреть все]  
  • +/
    Вариация на тему Smarty Транслятор шаблонов преобразует шаблон вида см ниже ... весь текст скрыт [показать]
     
  • 1.12, osintsev, 14:41, 19/05/2009 [ответить] [смотреть все]  
  • +/
    > *BSD:
    >   #!/bin/sh
    >  ...
    > Linux:
    >   #!/bin/bash
    >  ...

    феерично...

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
    - 11.05 Настройка беспроводного соединения в Debian GNU/Linux
    - 07.05 Использование Google Drive в Linux
    - 18.04 Использование нескольких сетевых стеков в Linux
    - 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
    - 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
    - 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
    - 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
    - 21.03 Настройка DNSSEC в BIND 9.9
    - 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
    RSS | Следующие 15 записей >>


    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList