Для цикла для портов на нескольких удаленных серверах в Linux

Моя программа должна работать на нескольких удаленных серверах с разными портами в скрипте, вот пример:

На сервере 1 нужно запустить:

java -jar test.jar 9001 **.**.**.** 9001
java -jar test.jar 9001 **.**.**.** 9002
java -jar test.jar 9001 **.**.**.** 9003
              .
              .
              .
java -jar test.jar 9001 **.**.**.** 9020

На сервере 2 нужно запустить:

java -jar test.jar 9001 **.**.**.** 9021
java -jar test.jar 9001 **.**.**.** 9022
java -jar test.jar 9001 **.**.**.** 9023
              .
              .
              .
java -jar test.jar 9001 **.**.**.** 9035

...

Так что для создания скрипта удобнее, как использовать цикл for в каждом серверном скрипте для запуска нескольких команд?

1 ответ

Решение

сервер 1:

for i in $(seq -f "%03g" 1 20)
do
  java -jar test.jar 9001 **.**.**.** 9${i}
done

сервер 2:

for i in $(seq -f "%03g" 21 35)
do
  java -jar test.jar 9001 **.**.**.** 9${i}
done

в то время как

seq -f <format> <first> <last>

использует printf строка формата стиля. Формат должен быть подходящим для печати одного аргумента типа double , Он может содержать спецификацию преобразования, состоящую из:

  • % : Вводит спецификацию преобразования
  • 0 : Преобразованное значение дополняется слева нулями, а не пробелами (необязательно)
  • 3 : Строка десятичной цифры (с ненулевой первой цифрой), указывающая минимальную ширину поля (необязательно)
  • g : Вывод аргумента типа double в плавающей запятой или экспоненциальной записи. Замыкающие нули удаляются из дробной части результата; десятичная точка появляется, только если за ней следует хотя бы одна цифра. (Это позволяет нам распечатать double который выглядит как integer )

Для более подробной информации смотрите:

man seq
man 3 printf
Другие вопросы по тегам