|
Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » select + if |
|
|
select + if
|
Пользователь Сообщения: 96 |
Помогите пожалуйста разобраться. Пишу небольшой скриптик, который будет создавать виртуальных хосты для Apache. В начале он будет выводить в консоль 2 варианта на выбор: Apache2 или Apache1.3
В зависимости от выбора пользователя будет выполнятся своя часть скрипта. Собственно весь скрипт тут не важен, а интересна мне именно эта часть: echo Where do you want to create virtual host? select opt in "Apache2" "Apache1.3"; do if [ "$opt" = "Apache2" ]; then #Apache2 echo -n "Enter pagename:" read PAGENAME echo -n "Page will be called $PAGENAME ?" read REPLY2 if [ "$REPLY2" = "y" ]; then continue else exit 0 fi Дальше выполнение прерывается. Я подозреваю, что хитрость в каком-то конфликте между этими условиями if [ "$opt" = "Apache2" ]; и if [ "$REPLY2" = "y" ]; Но никак не могу понять, как заставить его работать. Если нужно, здесь весь скрипт. |
|
Отправлено: 15:17, 26-05-2010 |
Линуксоид-стакановец Сообщения: 2391
|
Профиль | Отправить PM | Цитировать Насколько я знаю, select закрывается done, а if закрывается fi. В вашем примере этого нет. Вполне возможно, в этом проблема.
Вот пример с options и select: |
------- Отправлено: 16:07, 26-05-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 96
|
Профиль | Отправить PM | Цитировать Нет-нет, done и fi есть, посмотрите полный скрипт.
Насколько я понимаю select должен заканчиваться в конце скрипта, после выполнения всех действий, поэтому done и fi от первого условия поставлены в конце. Или я ошибаюсь? |
Отправлено: 16:19, 26-05-2010 | #3 |
Линуксоид-стакановец Сообщения: 2391
|
Профиль | Отправить PM | Цитировать Советую ещё раз пересчитать количество if и fi. Они должны совпадать. Кроме того, рекомендую вынести обработчики Apache2 и Apache1.3 в отдельные функции. Код разгрузиться и его будет легче сопровождать.
|
------- Отправлено: 16:24, 26-05-2010 | #4 |
Пользователь Сообщения: 96
|
Профиль | Отправить PM | Цитировать Переписал в таком виде. Все if по-моему заканчиваются fi. Увы, я далеко не великий писатель скриптов, этой мой 3-4 скрипт за всё время. Где я ошибаюсь?
Выполняется код до этого момента: if [ $REPLY2 = "y" ]; then continue else exit 0 fi Дальше прерывается. Такое чувство, что он не понимает ввод "y" и выполняет exit 0. #!/bin/sh function dir { echo changing home directory permissions: echo $BASEDIR ... chown svn.www $BASEDIR echo $HOMEDIR ... mkdir $HOMEDIR chown svn.www $HOMEDIR chmod 755 $HOMEDIR mkdir $TMPDIR chown svn.www $TMPDIR chmod 1770 $TMPDIR mkdir $LOGDIR chown root.www $LOGDIR chmod 755 $LOGDIR cp $SKEL $HOMEDIR } function apache2 { echo echo creating webserver configuration ... sed s/XXXXXX/$PAGENAME/ < /etc/apache2/vserver.proto >$PAGENAME.http echo please review new server configuration for $PAGENAME sleep 2 vim $PAGENAME.http echo appending new configuration to apache configuration file cat $PAGENAME.http >>/etc/apache2/vhosts.d/vhosts.conf rm -i $PAGENAME.http } function apache1 { echo echo creating webserver configuration ... sed s/XXXXXX/$PAGENAME/ < /etc/apache1.3/vserver.proto >$PAGENAME.http echo please review new server configuration for $PAGENAME sleep 2 vim $PAGENAME.http echo appending new configuration to apache configuration file cat $PAGENAME.http >>/etc/apache1.3/httpd.conf rm -i $PAGENAME.http } #End functions #Select menu echo Where do you want to create virtual host? select opt in "Apache2" "Apache1.3"; do #If Apache2 if [ "$opt" = "Apache2" ]; then echo -n "Enter pagename:" read PAGENAME echo -n "Page will be called $PAGENAME ?" read REPLY2 if [ $REPLY2 = "y" ]; then continue else exit 0 fi BASEDIR=/srv/virtual_2/$PAGENAME HOMEDIR=$BASEDIR/./html TMPDIR=$BASEDIR/tmp LOGDIR=$BASEDIR/logs GROUP=www SHELL=/bin/bash SKEL=/etc/web_skel/index.html mkdir $BASEDIR #Functions for Apache2 dir apache2 #Apache2 restart echo restarting apache /etc/init.d/apache2 restart echo Apache2 virtual host is done exit #If Apache1 elif [ "$opt" = "Apache1.3" ]; then echo -n "Enter pagename:" read PAGENAME1 echo -n "Page will be called $PAGENAME1?" read REPLY2 if [ "$REPLY2" = "y" ]; then continue else exit 0 fi BASEDIR=/srv/virtual_1.3/$PAGENAME1 HOMEDIR=$BASEDIR/./html TMPDIR=$BASEDIR/tmp LOGDIR=$BASEDIR/logs GROUP=www SHELL=/bin/bash SKEL=/etc/web_skel/index.html mkdir $BASEDIR #Functions for Apache1 dir apache1 #Apache1 restart echo restarting apache /etc/init.d/apache1.3 restart echo Apache2 virtual host is done # If bad parameter else clear echo You must enter 1 or 2 fi done |
|
Отправлено: 16:53, 26-05-2010 | #5 |
Линуксоид-стакановец Сообщения: 2391
|
Профиль | Отправить PM | Цитировать Блин! Совсем забыл, что в BASH, как и в C оператор "=" означает присваивание, а для равенства используется оператор "==". У вас оператор "=" всегда true, поэтому и происходит остановка.
|
------- Отправлено: 17:02, 26-05-2010 | #6 |
Пользователь Сообщения: 96
|
Профиль | Отправить PM | Цитировать Цитата [mzd:
if [ "$REPLY2" == "y" ]; ничего не поменялось. |
|
Отправлено: 17:07, 26-05-2010 | #7 |
Линуксоид-стакановец Сообщения: 2391
|
Профиль | Отправить PM | Цитировать А в других if = на == поменяли?
|
------- Отправлено: 17:19, 26-05-2010 | #8 |
Пользователь Сообщения: 96
|
Профиль | Отправить PM | Цитировать Цитата [mzd:
Тот же самый скрипт, но без echo Where do you want to create virtual host? select opt in "Apache2" "Apache1.3"; do if [ "$opt" = "Apache2" ]; then ..... if done Тут что-то с логикой из за этого select блока. |
|
Отправлено: 17:26, 26-05-2010 | #9 |
Линуксоид-стакановец Сообщения: 2391
|
Профиль | Отправить PM | Цитировать Кроме того, вместо if можно использовать case, а обработчики Apache2 и Apaceh1.3 тоже вынести в функции.
case равносильно if...elif...fi |
------- Отправлено: 17:28, 26-05-2010 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Динамический Select | darksmoke | Вебмастеру | 1 | 06-04-2008 22:15 | |
Select с HTML кодом | vadimiron | Вебмастеру | 10 | 19-02-2007 11:34 | |
Тег <Select> | Scorpion666 | Вебмастеру | 12 | 25-12-2006 21:46 | |
тройной select | Вебмастеру | 12 | 10-04-2006 23:09 | ||
Вложенный SELECT в MySQL | LEXX2002 | Вебмастеру | 7 | 06-09-2005 00:07 |
|