2014-10-20 2 views
0

Я написал сценарий, который автоматически устанавливает 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 сломается и вернет пользователя к последнему вопросу ... но это не так, что я делаю неправильно? Заранее благодарен

ответ

1

Вы хотите, чтобы break, только если введенный вход действителен.

break выйдет из-под контроля select.

Не break и select снова зациклится.

+0

Можете ли вы продемонстрировать мой код? –

+0

Замените 'break' на' continue'. –

+0

@ItaiGanot Удалите 'break' перед' elif'. Удалите «break» после того, как «echo Xinetd не установлен!». Добавьте 'break' после перезапуска $ XINETDSVC. Вы хотите только «ломать», когда можете делать то, что они сказали, не все время. –