Bash脚本:for循环,读取,数组,比较两个文件

时间:2016-07-28 17:15:22

标签: arrays bash shell for-loop while-loop

我正在尝试做这样的事情。

我需要file1中的每个条目/用户独立查询file2中的每个条目。

> cat file1
john 
james
mark
adam
luke
chris
scott

> cat file2
check if **user** has account
check if **user** has permission
check if **user** has website
check if **user** has root

所以基本上逐一从file1读取行,但是对file2中的所有条目执行。因此,约翰将对所有四个条目进行检查,然后是詹姆斯,等等。

我是否为每个用户分配变量?然后,我将如何在file2中定义它们,列表/文件的内容/大小可能会波动,以便适应这种变化..

谢谢你们! ISL

2 个答案:

答案 0 :(得分:1)

将您需要为第一个文件中的每个单词运行的命令集合放入脚本中,逐行读取文件并执行当前读取单词的命令:

while read -r word; do
   some command using "$word"
   some other command using "$word"
   # etc.
done <file_with_words

这里基本上发生的是我要求你将第二个文件变成带循环的脚本。

根据您的评论,第一个文件实际上包含主机名,第二个文件包含针对这些主机名运行的命令。您在问题中提出的问题是为第一个文件中的每个主机名创建并执行新脚本。这没什么意义,因为脚本已经是一个脚本(它听起来非常脆弱,如果输入没有得到妥善处理,可能会带来安全风险)。而是根据我上面的代码修改它以读入主机名。

答案 1 :(得分:0)

#!/bin/bash

while read user
do
        while read action
        do
                ## do your stuff here
                echo "$user:  ${action//user/$user}"

        done <  /home/user123/file2.txt

done <  /home/user123/file1.txt

将此脚本运行为:

> ./test.sh
john: check if **john** has account
john: check if **john** has permission
john: check if **john** has website
john: check if **john** has root
james: check if **james** has account
james: check if **james** has permission
james: check if **james** has website
james: check if **james** has root
mark: check if **mark** has account
mark: check if **mark** has permission
mark: check if **mark** has website
mark: check if **mark** has root
adam: check if **adam** has account
adam: check if **adam** has permission
adam: check if **adam** has website
adam: check if **adam** has root
luke: check if **luke** has account
luke: check if **luke** has permission
luke: check if **luke** has website
luke: check if **luke** has root
chris: check if **chris** has account
chris: check if **chris** has permission
chris: check if **chris** has website
chris: check if **chris** has root
scott: check if **scott** has account
scott: check if **scott** has permission
scott: check if **scott** has website
scott: check if **scott** has root