从文本文件读取并创建配置文件的脚本

时间:2018-07-17 14:21:29

标签: bash shell

我有一个名为lists.txt的文本文件,其中列出了所有节点。该文件位于/etc/icinga2/zones.d/master/hosts/中,并具有以下内容:

node1
node2
node3
.
.
.

我还有另一个名为template.conf

的文件

我想编写一个脚本

  1. lists.txt文件中读取
  2. 通过将template.conf的内容复制为node1.conf来创建具有节点名称的新conf文件
  3. 创建一个名为new的新目录:/etc/icinga2/zones.d/master/hosts/new
  4. chmod icinga:icinga node1.conf
  5. git添加node1.conf

这是我到目前为止提出的:


#!/bin/bash

cd /etc/icinga2/zones.d/master/hosts/
mkdir new
chown -R icinga:icinga new

for f in list.txt
do 
   cp -v "$f" /etc/icinga2/zones.d/master/hosts/new/"${f%.conf}"
done
cp template.conf ${f%.conf}
chmod icinga:icinga ${f%.conf}
git add ${f%.conf}

您能帮我完成吗?预先感谢


@ william-pursell, 感谢您的回复。这是脚本,它运行并引发一些错误,但是确实创建了文件,但没有.conf后缀:

#!/bin/bash
cd /etc/icinga2/zones.d/master/hosts/new
while read f; do
   cp -v "$f" /etc/icinga2/zones.d/master/hosts/new/"${f%}.conf"
   cp template.conf "${f%.conf}"
   chown icinga:icinga "${f%}.conf"
#   git add "${f%.conf}"
#   git commit -m "Add $f"
done < list.txt

它运行并创建名为node1,node2,...的新文件,但不带后缀.conf。不知道为什么。然后复制所有模板中的内容,但还会引发以下错误:

cp: cannot stat ‘node1’: No such file or directory chown: cannot access ‘node2’: No such file or directory

我尝试将其添加为注释,但是格式使其变得不可读。

谢谢

1 个答案:

答案 0 :(得分:0)

while read f; do 
   cp -v "$f" /etc/icinga2/zones.d/master/hosts/new/"${f%.conf}"
   cp template.conf "${f%.conf}"
   chmod icinga:icinga "${f%.conf}"
   git add "${f%.conf}"
   git commit -m "Add $f"
done < list.txt

请注意,如果您的任何文件名都包含换行符,这将完全失败,但是如果您将文件名存储在每行一个文件中,那么这种情况将无法正常工作。