我有一个名为lists.txt
的文本文件,其中列出了所有节点。该文件位于/etc/icinga2/zones.d/master/hosts/
中,并具有以下内容:
node1
node2
node3
.
.
.
我还有另一个名为template.conf
我想编写一个脚本
lists.txt
文件中读取template.conf
的内容复制为node1.conf
来创建具有节点名称的新conf文件/etc/icinga2/zones.d/master/hosts/new
chmod icinga:icinga 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
我尝试将其添加为注释,但是格式使其变得不可读。
谢谢
答案 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
请注意,如果您的任何文件名都包含换行符,这将完全失败,但是如果您将文件名存储在每行一个文件中,那么这种情况将无法正常工作。