#!/bin/bash
check=`monStatus.sh -p appName:Tomcat |head -2 |tail -1 | nawk '{print $2}'`
if [ "$check" != "offline" ]; then
#echo "Tomcat still running"
sleep 90
else
#echo "Restarting Tomcat"
RestartTomcat.sh
fi
Вот отрывок оболочки. Моя проблема - это. Мне нужно первое затем, чтобы быть похожим sleep 90
И затем пробегите if/then/else оператор снова в основном, пока это не еще, завершается на, который затем перезапустит Tomcat, после того как это не говорит выполнение. Я не могу перенести мозг, как циклично выполнить его.
Если необходимо повторить документ на получение бесконечно, можно использовать вложенный while
цикл:
while true; do
# Do something, for example output the current date and time:
printf '%(%c)T\r' -1
done
В Вашем примере кода Вы используете старый стиль для выходного обертывания подоболочки. Поскольку @ThomasWard говорит: "большинство руководств Bash не рекомендует использование обратных галочек и вместо этого предлагает перенести Ваши команды в $( )
, т.е. $(monStatus.sh -p appName:Tomcat | head -2 | tail -1 | nawk '{print $2}')
. Это - на самом деле более рекомендуемый способ сделать выходное получение подоболочки как переменную или как замена в наше время."
Как @dessert говорит, "примечание, там на самом деле различие между обратными галочками и $(…)
синтаксис: Когда форма одинарной левой кавычки старого стиля замены используется, обратная косая черта сохраняет свое буквальное значение кроме тех случаев, когда сопровождаемый $
, `
, или \
. – сравнивают выводы echo $(echo \\ )
и echo `echo \\ `
!"
Кроме того, можно упростить еще немного вещей:
Использовать nawk 'FNR==2{print $2}'
вместо head -2 | tail -1 | nawk '{print $2}'
.
Используйте Bash встроенный тест [
(см. man test
и этот ответ), 'и' оператор списка &&
, и положительный (==
, -eq
) вместо отрицательного (!=
, -ne
) условие.
#!/bin/bash
while true; do
sleep 90
[[ $(monStatus.sh -p appName:Tomcat | nawk 'FNR==2{print $2}') == 'offline' ]] && RestartTomcat.sh
done
Но, согласно комментарию "после того, как это выполняет перезапуск, который это должно закончить", корректное предложение состоит в том, чтобы использовать while
с условием:
#!/bin/bash
while [[ $(monStatus.sh -p appName:Tomcat | nawk 'FNR==2{print $2}') -ne offline ]]
do
sleep 90
done
RestartTomcat.sh
Или если Вы хотите использовать положительное условие, until
цикл может быть реализован таким же образом:
#!/bin/bash
until [[ $(...) -eq offline ]]; do sleep 90; done; RestartTomcat.sh