调用另一个脚本以在目录中的每个文件上执行的脚本

时间:2018-02-28 18:57:23

标签: linux bash scripting

有两个目录包含这些文件:

首先是/ usr / local / nagios / etc / hosts

[root@localhost hosts]$  ll
total 12
-rw-rw-r-- 1 apache nagios 1236 Feb  7 10:10 10.80.12.53.cfg
-rw-rw-r-- 1 apache nagios 1064 Feb 27 22:47 10.80.12.62.cfg
-rw-rw-r-- 1 apache nagios 1063 Feb 22 12:02 localhost.cfg

第二个是/ usr / local / nagios / etc / services

[root@localhost services]$  ll
total 20
-rw-rw-r-- 1 apache nagios 2183 Feb 27 22:48 10.80.12.62.cfg
-rw-rw-r-- 1 apache nagios 1339 Feb 13 10:47 Check usage _etc.cfg
-rw-rw-r-- 1 apache nagios 7874 Feb 22 11:59 localhost.cfg

我有一个脚本通过Hosts目录中的文件,并将该文件中的一些行粘贴到Services目录中的文件中。

脚本运行如下:

./ nagios-contacts.sh /usr/local/nagios/etc/hosts/10.80.12.62.cfg /usr/local/nagios/etc/services/10.80.12.62.cfg

如何实现另一个脚本调用我的脚本并遍历Hosts目录中的每个文件,并为Service目录中具有相同名称的文件执行其工作?

在我的脚本中,我从Hosts目录中的10.80.12.62.cfg中取出联系人,并将它们附加到Service目录中具有相同名称的文件中。

2 个答案:

答案 0 :(得分:1)

请勿使用ls输出作为for loop的输入,而是使用内置的通配符。见why这不是一个好主意。

for f in /usr/local/nagios/etc/hosts/*.cfg
do
  basef=$(basename "$f")
  ./nagios-contacts.sh "$f" "/usr/local/nagios/etc/services/${basef}"
done

答案 1 :(得分:0)

听起来你只需要进行一些迭代。

"velocity-animate": '"velocity-animate"'

因此它将遍历当前目录中的所有文件。

您也可以通过做一些更绝对的事情来修改它。

echo $(pwd)
for file in $(ls); do ./nagious-contacts.sh $file; done;

将遍历set目录中的所有文件,然后将abspath / filename传递给您的脚本。