【问题标题】:How to add variable text in different files using for loop in bash script如何在 bash 脚本中使用 for 循环在不同文件中添加变量文本
【发布时间】:2021-02-12 09:14:11
【问题描述】:

我正在尝试在几个文件的末尾添加一些文本。 我制作了一个文件,其中有 5 个服务器名称。每个服务器名对应一个单独的配置文件。 (这些配置文件的路径未知)。

我正在使用下面的代码来获取文件路径,

我的代码:

#!/bin/bash
for i in $(cat serverlist-file | while read f; do find . -name "*$f*"; done);
do
echo $i
done

输出:

/data/servers/customer01/server01.cfg
/data/servers/customer01/server02.cfg
/data/servers/customer02/server03.cfg
/data/servers/customer03/server04.cfg
/data/servers/customer03/server05.cfg

我正在使用下面的代码来获取服务器列表,

我的代码:

#!/bin/bash
for j in $(cat serverlist-file);
do
echo $j
done

输出:

server01
server02
server03
server04
server05

现在我想编辑这些配置文件并向其中添加文本。

我正在使用下面的代码来添加所需的文本:

#!/bin/bash
for i in $(cat serverlist-file | while read f; do find . -name "*$f*"; done);
do
for j in $(cat serverlist-file);
do 
sed -i -e "\$a\
this\ is\ a\ config\ file\nfor\ $j" $i
done
done

预期输出:

/data/servers/customer01/server01.cfg
this is a config file
for server01
/data/servers/customer01/server02.cfg
this is a config file
for server02
/data/servers/customer02/server03.cfg
this is a config file
for server03
/data/servers/customer03/server04.cfg
this is a config file
for server04
/data/servers/customer03/server05.cfg
this is a config file
for server05

编辑回复@ShawnMilo:

我正在尝试将一些配置批量添加到一些 nagios 配置文件中,但不是添加到所有服务器配置文件中。

因此,使用 find 进行搜索。 -name '*.config' 不起作用,因为所有配置文件都将被编辑。 我只想编辑特定的文件,只需要编辑 serverlist-file 中的服务器。

Nagios 配置需要在其中包含服务器的主机名,例如:

define service {
use                             generic-service
host_name                       server01
service_description             SSH
contact_groups                   linux
check_command                check_something
}

【问题讨论】:

    标签: bash for-loop variables


    【解决方案1】:

    似乎是一个奇怪的要求。你到底想做什么?

    无论如何,这将满足要求:

    $ find . -name '*.config' | while read x; do echo $x; cat $x; echo; done
    ./data/servers/customer02/server03.config
    default stuff here
    
    ./data/servers/customer03/server05.config
    default stuff here
    
    ./data/servers/customer03/server04.config
    default stuff here
    
    ./data/servers/customer01/server01.config
    default stuff here
    
    ./data/servers/customer01/server02.config
    default stuff here
    
    $ find . -name '*.config' | while read x; do name=$(basename $x); echo -e "this is a config file\nfor ${name%%.*}" >> $x; done
    
    $ find . -name '*.config' | while read x; do echo $x; cat $x; echo; done
    ./data/servers/customer02/server03.config
    default stuff here
    this is a config file
    for server03
    
    ./data/servers/customer03/server05.config
    default stuff here
    this is a config file
    for server05
    
    ./data/servers/customer03/server04.config
    default stuff here
    this is a config file
    for server04
    
    ./data/servers/customer01/server01.config
    default stuff here
    this is a config file
    for server01
    
    ./data/servers/customer01/server02.config
    default stuff here
    this is a config file
    for server02
    

    【讨论】:

    • 您可以使用相同的find 命令查找所有文件并将它们添加到文本文件中。然后将它们与您的列表相对应,然后使用该列表。 ``` 找到。 -name '*.conf' > all_files.txt grep -F -f serverlist all_files.txt > to_change.txt ``` 然后在我描述的初始循环中使用to_change.txt 而不是find 命令的输出。
    猜你喜欢
    • 2021-01-16
    • 2022-10-16
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2013-03-20
    • 2011-10-25
    • 2015-06-06
    相关资源
    最近更新 更多