Вложенный для l oop с выходной текстовой переменной - PullRequest
0 голосов
/ 09 июля 2020

Мне нужно изменить простой сценарий bash на go через файлы и добавить текст в конец каждого файла с именем переменной файла. Вот пример файла Nag ios .cfg ... пока что я получил что-то вроде этого:

#!/bin/bash

list=$(ls /root/user/test/ | sed "s/\.cfg//")

for servery in `/root/user/test/*.cfg`; do
    for $list; do
        echo `
        
        define service {
               host_name                       $list
               service_description             All_fs_free_space
               check_command                   check_nrpe!check_all_disks!3% 1%
               use                             user-disk
        }` >> /etc/nagios3/conf.d/servers/test/$servery
    done
done

, который, к сожалению, не работал из-за кавычек ...? Есть ли лучшее решение, как этого добиться? Спасибо.

Отладочные данные для решения Пола Ходжеса:

    root@bla:~/blabla# ./add2.sh
    ++ fmt='
    
        define service {
               host_name                       %s
               service_description             All_fs_free_space
               check_command                   check_nrpe!check_all_disks!3%% 1%%
               use                             user-disk
        }'
    ++ for file in '/root/user/test/*.cfg'
    ++ cfg='*.cfg'
    ++ printf '
    
        define service {
               host_name                       %s
               service_description             All_fs_free_space
               check_command                   check_nrpe!check_all_disks!3%% 1%%
               use                             user-disk
        }' '*'
    ./add2.sh: line 14: /root/blabla/test/servers/$cfg: ambiguous redirect

1 Ответ

1 голос
/ 09 июля 2020

Абстрагируйте его немного подробнее.

Обновление -

Проверка существования файла в соответствии с комментариями выше.

#!/bin/bash
fmt='

    define service {
           host_name                       %s
           service_description             All_fs_free_space
           check_command                   check_nrpe!check_all_disks!3%% 1%%
           use                             user-disk
    }'

for file in /root/user/test/*.cfg # assuming there are *.cfg files here
do if [[ -e "/root/blabla/test/servers/$cfg" ]]
   then cfg=${file##*/}                # stripping the path
        printf "$fmt\n" "${cfg%.cfg}" >> /etc/nagios3/conf.d/servers/test/$cfg
   else echo "File not found: /root/blabla/test/servers/$cfg" >&2
   fi
done

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

...