Я написал сценарий, который автоматически устанавливает NRPE, один из шагов, который выполняет скрипт, спрашивает вас, как вы хотите установить демона (standalone/xinetd)
. Если пользователь выбирает xinetd
, я запускаю проверку, если файл /etc/init.d/xinetd
существует, а если нет, сценарий печатает «Xinetd не установлен!». и сразу после него break
.Shell Script: Как обеспечить отображение предыдущего запроса, если утверждение верно?
Вот соответствующая часть сценария:
echo "How would you like to configure the NRPE daemon?"
select DMN in 'Xinetd' 'Standalone Daemon'; do
if [ "$DMN" = "Xinetd" ];
then
DMNMODE="xinetd"
if [ -e $XINETDSVC ]; then
cat <<EOF> $XINETDFILE
service nrpe
{
flags = REUSE
type = UNLISTED
port = $NRPEPORT
socket_type = stream
wait = no
user = $NGUSER
group = $NGGROUP
server = /usr/sbin/nrpe
server_args = -c $NRPECFG --inetd
log_on_failure += USERID
disable = no
only_from = 127.0.0.1 $NAGIOSSRV
}
EOF
$XINETDSVC restart
else
echo "Xinetd is not installed!"
break
fi
break
elif [ "$DMN" = "Standalone Daemon" ];
then
DMNMODE="daemon"
chkconfig nrpe on ; $NRPESVC start
break
fi
done
Идея заключается в том, что если файл отсутствует, что означает, что xinetd
не установлен, я хочу сценарий, чтобы попросить пользователя еще раз, как он хотел бы для установки службы. Но в действии, когда я запускаю скрипт, если я выбираю xinetd
, а xinetd
не установлен, тогда сценарий печатает «Xinetd не установлен», а затем переходит к следующему этапу скрипта.
Я думал, что помещение break
внутри if statement
сломается и вернет пользователя к последнему вопросу ... но это не так, что я делаю неправильно? Заранее благодарен
Можете ли вы продемонстрировать мой код? –
Замените 'break' на' continue'. –
@ItaiGanot Удалите 'break' перед' elif'. Удалите «break» после того, как «echo Xinetd не установлен!». Добавьте 'break' после перезапуска $ XINETDSVC. Вы хотите только «ломать», когда можете делать то, что они сказали, не все время. –