Итак, мне просто интересно, почему в блоке кода ниже код с комментариями выводит только 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 ##».
Вы спрашиваете, почему ваш закомментирована код создает только один выходной файл и ваш не комментируются код создает несколько файлов ? – Fazlin
Да, точно. Извините, должно было сделать это более ясным! Некоммерческий код выполняет итерацию через цикл точно столько раз, сколько я задавал/надеялся. –
Проблема не в вашей петле, а в 'sed'. Проблема в том, что вы перезаписываете файл '$ SEPNEW' на каждой итерации. '$ SEPNEW' получает значение' ghsep2.json' в начале, когда вы делаете 'SEPNEW = ghsep '$ j" .json' и остается таким образом. – Fazlin