Здравствуйте, уважаемые!Стоит следующая задача:
Есть 2 файла (сделанные из одного посредством awk, так что если удастся упростить решение - будет замечательно)
файл ~/ip вида:
х.х.х.х
у.у.у.у
z.z.z.z
.......
и соответствующий ему файл ~/hosts вида:
site1.ru
site2.ru
site3.ru
........
Естественно, x.x.x.x соответсвует site1.ruЕсть необходимость создать скрипт, который будет создавать файлы конфига с названием вида х.х.х.х.cfg, если ему скармливать ~/ip и ~/hosts.
На данный момент оно выглядит так:
#!/bin/sh
for ip in `cat /home/spetrov/tmp/ip`
do
echo "define host{
use generic-printer
host_name $host
alias $host
address $ip
hostgroups network
}define service{
use generic-service
host_name $host
service_description PING
check_command check_ping!3000.0,80%!5000.0,100%
normal_check_interval 10
retry_check_interval 1
}"
donefor host in `cat /home/spetrov/tmp/hosts`
do
echo "define host{
use generic-printer
host_name $host
alias $host
address $ip
hostgroups network
}define service{
use generic-service
host_name $host
service_description PING
check_command check_ping!3000.0,80%!5000.0,100%
normal_check_interval 10
retry_check_interval 1
}"done
echo
#> /home/spetrov/tmp/1/$ip.cfgТак как в bash-программировании я новичок, не совсем понимаю, как мне вывести результат в файл
>Так как в bash-программировании я новичок, не совсем понимаю, как мне вывести
>результат в файлЭто делается с помощью перенаправления вывода.
echo "Foo" # вывод строки "Foo" на экран
echo "Foo" > foo.txt # вывод строки "Foo" в файл foo.txt
echo "Boo" > foo.txt # вывод строки "Boo" в файл foo.txt, прежнее содержимое файла теряется
echo "Blah" >> foo.txt # добавление строки "Blah" в конец файла foo.txt, прежнее содержимое сохраняетсяВ вашем случае можно также перенаправить вывод не внутри скрипта, а при его запуске:
./script.sh > file.cfg
Я бы сделал так:
- файл с адресами/хостами один, в формате "x.x.x.x yyyy.ru"
- файл-шаблон, в котором указаны специальные метки, которые позже будут заменены на адреса
- скрипт читает адрес/хост, заменяет эти данные в шаблоне и всё это сохраняет в файл.Выглядит это примерно так:
[c0der@xxx ~]$ cat hosts.txt
х.х.х.х site1.ru
у.у.у.у site2.ru
z.z.z.z site3.ru
[c0der@xxx ~]$ cat generate_cfg.sh
#!/bin/shwhile read IP HOST; do
echo "Generate config for site $HOST ($IP)..."
sed "s|@IP@|$IP|;s|@HOST@|$HOST|" template.cfg >"$HOST.cfg"
done <hosts.txt[c0der@xxx ~]$ cat template.cfg
define host {
use generic-printer
host_name @HOST@
alias @HOST@
address @IP@
hostgroups network
}define service {
use generic-service
host_name @HOST@
service_description PING
check_command check_ping!3000.0,80%!5000.0,100%
normal_check_interval 10
retry_check_interval 1
}[c0der@xxx ~]$
Запускаем:
[c0der@xxx ~]$ ./generate_cfg.sh
Generate config for site site1.ru (х.х.х.х)...
Generate config for site site2.ru (у.у.у.у)...
Generate config for site site3.ru (z.z.z.z)...
[c0der@xxx ~]$ ls -l site*
-rw-r--r-- 1 coder coder 316 Апр 18 12:58 site1.ru.cfg
-rw-r--r-- 1 coder coder 316 Апр 18 12:58 site2.ru.cfg
-rw-r--r-- 1 coder coder 312 Апр 18 12:58 site3.ru.cfg
[c0der@xxx ~]$ cat site1.ru.cfg
define host {
use generic-printer
host_name site1.ru
alias site1.ru
address х.х.х.х
hostgroups network
}define service {
use generic-service
host_name site1.ru
service_description PING
check_command check_ping!3000.0,80%!5000.0,100%
normal_check_interval 10
retry_check_interval 1
}[c0der@xxx ~]$
Если я правильно понял задачу, то это как раз, то что вам и требуется.
phpcoder, благодарю! Именно то, что нужно!Попробовал еще кое-что таким же образом сделать. Вроде начал понимать. Спасибо.