Здесь есть несколько ошибок:
1) $1
будет содержать только первый параметр. Вам понадобится $*
, чтобы содержать более одного. (И учитывая, что вы хотите, чтобы переменная содержала несколько портов, тогда было бы более полезно вызвать переменную PORTS
.)
2) У вас не может быть пробелов вокруг =
в присвоении переменной in bash.
3) Вы перебираете i
, но не используете эту переменную внутри l oop. Если у вас есть -Dserver.port="$PORT"
, вы должны вместо этого использовать свою l oop переменную i
.
4) Вам не хватает символа продолжения строки \
в конце строки java ...
(убедитесь, что после него нет пробелов).
5) Разделитель команд ;
в конце первой строки является избыточным (хотя на самом деле он не вредит).
6) Где вы тестируются на неправильное использование, скрипт выдаст предупреждение, но продолжит работу. Вам нужно поместить туда оператор exit
. В случае сбоя рекомендуется давать ненулевое значение выхода, поэтому здесь предлагается exit 1
.
Объединение этих значений:
#!/bin/bash
PORTS=$*
if [ $# -eq 0 ]
then
echo "No arguments supplied"
exit 1
fi
for i in $PORTS
do
java -DpropertySource=~/Downloads/app.properties -jar APP.jar \
-Dserver.port="$i" &
done
Что касается &
, он запустит команду в фоновом режиме, так что выполнение скрипта будет продолжено (включая затем достижение конца и выход), пока запущенная команда все еще может выполняться. Так что да, ваши java экземпляры, прослушивающие разные порты, будут работать параллельно.