2016-01-20 2 views
0

Я хочу объединить два сценария цикла в одном скрипте. Каждый скрипт не связан с другим. Предположим, что есть два файла.объединить несколько сценариев цикла в одном скрипте bash

  • file1
  • 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 
+2

Что мешает вам сделать это? – ForceBru

+0

В чем проблема? – 123

+0

Не могли бы вы подробнее рассказать? – midihenry

ответ

0

В моем ответе я буду использовать обозначения $(cat file1), что хороший способ вызова подпроцесс (backtics запутываются).
Если вы хотите, чтобы петли J для каждого значения I, объединить петлю с

#!/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 
Смежные вопросы