带有输出文本变量的嵌套 for 循环

Nested for loop with output text variable

我需要修改简单的 bash 脚本来遍历文件并在每个文件的末尾添加一些文本,其中包含文件变量的名称。有一个 Nagios .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

不幸的是没有用,因为引号...?有没有更好的解决方案如何实现这一目标?谢谢。

Paul Hodges 解决方案的调试输出:

    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

再抽象一点。

更新-

按照上面的评论检查文件是否存在。

#!/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

对您的意图做出一些假设。
我会先备份所有内容,然后在使用通配符之前编辑以仅匹配一个文件进行测试...