Bash for循环从文本文件运行命令

时间:2014-06-10 13:49:15

标签: linux bash ubuntu for-loop

我正在尝试编写一个for循环,查看文本文件中的主机列表,然后运行一系列来自另一个文件的命令,该文件以主机的IP和文件{{1 }}

例如,在extension.txt文件中,我将定义以下主机:

hosts.txt

等。

在另一个目录中,我将使用一组不同的命令命名如下:我希望在每个主机上运行这些命令:

192.168.1.1
192.168.3.1
192.168.2.197

因此,如果192.168.1.1.txt 192.168.3.1.txt 192.168.2.197.txt 中存在主机192.168.1.1,它会在hosts.txt中针对该主机运行命令。如果它不在192.168.1.1.txt循环中,那么最简单的工具是什么?

3 个答案:

答案 0 :(得分:4)

while read file; do
    bash ./files/$file.txt
    # or source ./files/$file.txt, as necessary
done < hosts.txt

答案 1 :(得分:0)

while read file; do    
bash /path/${file}.txt
done < hosts.txt

我想这应该为你做到

在对此答案的第2号评论中学习后,更改了答案。 这主要是下面提供的相同答案。

答案 2 :(得分:0)

使用xargs可能最简单:

xargs -I % bash "./scripts/%.txt" < hosts.txt
  • -I %确保为每个输入行(hosts.txt中的行)调用指定的命令,并用行代替%字符(作为单个参数)。
  • 假设
  • ./scripts是托管要调用的脚本的目录。