Для цикла для портов на нескольких удаленных серверах в 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