1

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

На сервере 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

2

сервер 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .