Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Считать данные из текстового файла, в которм содержатся имена переменных  (Прочитано 214037 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Measurer

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
  • Измеритель верёвочками
    • Просмотр профиля
Есть большое количество железок, в которые нужно залить конфиг. Хотелось создать дефолтный конфиг с именами переменных, считывать этот конфиг и налету подставлять значения переменных.
Думал, что будет просто, но вот подиж ты...

В общем, есть примерно такой файл с конфигом:
hostname ${DEVICE_NAME}
vlan "${VLAN1}"
 name VLAN1
!
vlan ${VLAN2}
 name VLAN2

Хотел его читать построчно и выводить в консоль, думая, что текст ${DEVICE_NAME} будет заменяться на значение переменной ${DEVICE_NAME}, определённой в скрипте.

Читаю вот так:
while read line
do
    echo $line
done < default.cfg

Но выводится именно содержимое дефолтного конфига, без замены имён переменных на значения переменных.
sed-ом лезть в файл не хочется.
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6761
  • 20% Cooler
    • Просмотр профиля
Откуда берутся значения переменных?
(Нажмите, чтобы показать/скрыть)
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Measurer

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
  • Измеритель верёвочками
    • Просмотр профиля
Есть файл-таблица, где в виде столбцов - все параметры. Вводишь IP железки, скрипт ищет нужную строку, парсит столбцы на переменные.

Примерно так:

params=`grep ${IP} switch_table.dat`

DEVICE_NAME=`echo ${params} | /usr/bin/awk '{print $1}'`
DEVICE_POSITION=`echo ${params} | /usr/bin/awk '{print $2}'`
VLAN1=`echo ${params} | /usr/bin/awk '{print $3}'`
VLAN2=`echo ${params} | /usr/bin/awk '{print $4}'`
IP=`echo ${params} | /usr/bin/awk '{print $5}'`

Если ВНЕ цикла read сделать:
echo "vlan ${VLAN1}"То выводится правильно. Например:
vlan 121Если то же самое сделать в цикле read, то выводится тоже правильно.
Но вот если читается строка из файла-конфига, где упоминается ${VLAN1}, то подстановки значения переменной не происходит.
« Последнее редактирование: 03 Апреля 2024, 03:27:22 от Measurer »
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6761
  • 20% Cooler
    • Просмотр профиля
while read line
do
   eval "echo $line"
done < default.cfg
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Measurer

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
  • Измеритель верёвочками
    • Просмотр профиля
Спасибо, уважаемый гуру. С такими людьми становишься умнее.

Пользователь добавил сообщение 03 Апреля 2024, 12:04:23:
Может быть, уважаемый гуру поможет ещё в одном вопросе?
При вводе IP адреса, например 192.168.5.12, grep мне ищёт

192.168.5.12
192.168.5.120
192.168.5.121
192.168.5.122 и т.д.

Как можно искать по полному совпадению? Только построчно читать файл и сравнивать в каждой строке?
« Последнее редактирование: 03 Апреля 2024, 12:04:23 от Measurer »
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6761
  • 20% Cooler
    • Просмотр профиля
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Measurer

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
  • Измеритель верёвочками
    • Просмотр профиля
И опять не слава Богу...
После eval кавычки не выводятся, даже с экранировкой.
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6761
  • 20% Cooler
    • Просмотр профиля
Выложите все файлы, с которыми работаете.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Measurer

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
  • Измеритель верёвочками
    • Просмотр профиля
Почикал немного скрипт и конфиг. Не могу всю информацию выкладывать. Но в первом приближении - так.
Скрипт и дефолтный конфиг.
Скрипт читает конфиг, заменяет переменные и выводит в консоль, в файл конфигурации, который нужно сохранить и в СОМ порт, на саму железку.

В конфиге есть несколько строк, которые должны быть в кавычках:
hostname "${DEVICE_NAME1}-${DEVICE_NAME2}"
snmp-server server community "${snmp_community}" ${snmp_server_ip} mask ${snmp_ipmask}
clock timezone '' 5

Причём, кавычки разные.
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6761
  • 20% Cooler
    • Просмотр профиля
Всё проще, чем казалось)
Пробуйте:
cat TYPE1_default.cfg.txt | envsubst
и вариант не трубить кота:
envsubst < TYPE1_default.cfg.txt
« Последнее редактирование: 04 Апреля 2024, 02:19:31 от ALiEN »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Measurer

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
  • Измеритель верёвочками
    • Просмотр профиля
Благодарю. Очень сильно помогли.
Как говорится... "Будете у нас, на Колыме..." (с) Бриллиантовая рука... милости просим.
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

 

Страница сгенерирована за 0.059 секунд. Запросов: 25.