在单个bash脚本中组合多个for循环脚本

时间:2016-01-20 09:57:49

标签: bash unix

我想在一个脚本中组合两个for循环脚本。每个脚本都与另一个脚本无关。 假设有两个文件。

  • 文件1
  • file2的

我想写一个像

这样的脚本
#!/bin/bash

for i in `cat file1` ; do
    command 1
    command 2
done

for j in `cat file2` ; do
    command 1
    command 2
done

1 个答案:

答案 0 :(得分:0)

在我的回答中,我将使用符号$(cat file1),这是一个很好的方式调用子进程(backtics变得混乱)。
如果要为i的每个值循环j,请将循环与

组合
#!/bin/bash
for i in $(cat file1); do
   for j in $(cat file2); do
      command_1
      command_2
   done 
done

我认为你想要以不同方式组合循环:为两个文件中的所有内容调用相同的命令。这可以通过

完成
#!/bin/bash
for i in $(cat file1) $(cat file2); do
   command_1
   command_2
done

在这种情况下,可以组合两个cat命令:

#!/bin/bash
for i in $(cat file1 file2); do
   command_1
   command_2
done

上面的脚本对i的值做的很少。为文件file1和file2中的每个单词调用您的命令。我想你想为这些文件中的每一行调用命令,这可以用不同的方式完成:

#!/bin/bash
cat file1 file2 | while read -r line; do
   command_1 "${line}"
   command_2 "${line}"
done

当你在其他情况下使用它时,请记住你也可以read分隔单词中的每一行,当你只有一个输入文件时,你可以不用cat

#!/bin/bash
cat file1 file2 > file3
while read -r var1 var2 othervars; do
   command_1 "${var1}"
   command_2 "${var2}"
   echo "The remaining words ${othervars} are not used in this loop."
done < file3