2016-07-11 5 views
0

Итак, мне просто интересно, почему в блоке кода ниже код с комментариями выводит только 1 файл - последний файл, который будет создан? У меня нет большого опыта работы с sed или написанием сценариев оболочки, но они кажутся мне идентичными, за исключением того, что второй цикл for не использует переменные для указания замен, используемых в команде sed. Я предполагаю, что это имеет какое-то отношение к тому, как я редактирую строки, хранящиеся в переменных, с помощью итераторов цикла while.Использование «SED» для создания файлов конфигурации

i=32; 
j=2; 

SEPORIG="ghsep1"; 
#SEPHN="ghsep"$j""; 
SEPIP="10.84.194.31"; 
#NEWIP="10.84.194."$i""; 
SEPORGN=ghsep1.json; 
#SEPNEW=ghsep"$j".json; 

#while [ $i -lt 90 ]; 
#do 
# sed "s/$SEPORIG/$SEPHN/; s/$SEPIP/$NEWIP/" $SEPORGN > $SEPNEW; 
# i=$(($i + 1)); 
# j=$(($j + 1)); 
#done; 

while [ $i -lt 90 ]; 
do 
    sed "s/$SEPORIG/"ghsep"$j""/; s/$SEPIP/"10.84.194."$i""/"$SEPORGN > ghsep"$j".json; 
    i=$(($i + 1)); 
    j=$(($j + 1)); 
done; 

В основном этот код просто редактирует имя хоста и IP-адрес файла JSON, используемый для создания спецификаций для сервера. Итераторы и условные обозначения жестко запрограммированы, потому что мы знаем, сколько серверов мы будем развертывать с использованием этих файлов конфигурации JSON. Я думаю, что код, вероятно, очень уродлив из-за моих ограниченных знаний с помощью сценариев JSON или shell.

Может ли кто-нибудь дать мне представление о том, как отличаются 2 блока кода для циклов? Может быть, я просто что-то упустил, а новый свежий набор глаз. Кроме того, если у кого-нибудь есть предложения о том, как я могу улучшить сценарий, основываясь на том, что я сказал вам, это было бы здорово! Я чувствую, что есть некоторые вещи, которые я могу сделать, чтобы очистить или сократить код, или, может быть, нет, поскольку для этого требуется достаточное количество жесткого кодирования для размера скрипта? Это особенно верно в связи с тем, что не каждое имя хоста будет «ghsep ##», существует как минимум 4 других типа имен хостов, например «gmtip ##».

+1

Вы спрашиваете, почему ваш закомментирована код создает только один выходной файл и ваш не комментируются код создает несколько файлов ? – Fazlin

+0

Да, точно. Извините, должно было сделать это более ясным! Некоммерческий код выполняет итерацию через цикл точно столько раз, сколько я задавал/надеялся. –

+0

Проблема не в вашей петле, а в 'sed'. Проблема в том, что вы перезаписываете файл '$ SEPNEW' на каждой итерации. '$ SEPNEW' получает значение' ghsep2.json' в начале, когда вы делаете 'SEPNEW = ghsep '$ j" .json' и остается таким образом. – Fazlin

ответ

0

Забрав из вашего комментировал код:

sed "s/$SEPORIG/$SEPHN/; s/$SEPIP/$NEWIP/" $SEPORGN > $SEPNEW 

будет перезаписать файл $SEPNEW (который имеет фиксированное значение ghsep2.json) для каждой итерации, поэтому он дает вам только один файл, и только последняя итерация преобладающее ,

В вас новом коде, вы перебор файла с $j давая вам новый файл для каждой итерации: ghsep"$j".json

Смежные вопросы