![]() |
select + if
Помогите пожалуйста разобраться. Пишу небольшой скриптик, который будет создавать виртуальных хосты для Apache. В начале он будет выводить в консоль 2 варианта на выбор: Apache2 или Apache1.3
В зависимости от выбора пользователя будет выполнятся своя часть скрипта. Собственно весь скрипт тут не важен, а интересна мне именно эта часть: Код:
echo Where do you want to create virtual host? Дальше выполнение прерывается. Я подозреваю, что хитрость в каком-то конфликте между этими условиями if [ "$opt" = "Apache2" ]; и if [ "$REPLY2" = "y" ]; Но никак не могу понять, как заставить его работать. Если нужно, здесь весь скрипт. |
Насколько я знаю, select закрывается done, а if закрывается fi. В вашем примере этого нет. Вполне возможно, в этом проблема.
Вот пример с options и select: Код:
#!/bin/bash |
Нет-нет, done и fi есть, посмотрите полный скрипт.
Насколько я понимаю select должен заканчиваться в конце скрипта, после выполнения всех действий, поэтому done и fi от первого условия поставлены в конце. Или я ошибаюсь? |
Советую ещё раз пересчитать количество if и fi. Они должны совпадать. Кроме того, рекомендую вынести обработчики Apache2 и Apache1.3 в отдельные функции. Код разгрузиться и его будет легче сопровождать.
|
Переписал в таком виде. Все if по-моему заканчиваются fi. Увы, я далеко не великий писатель скриптов, этой мой 3-4 скрипт за всё время. Где я ошибаюсь?
Выполняется код до этого момента: if [ $REPLY2 = "y" ]; then continue else exit 0 fi Дальше прерывается. Такое чувство, что он не понимает ввод "y" и выполняет exit 0. Код:
#!/bin/sh Код:
if [ "$opt" = "Apache2" ]; then |
Блин! Совсем забыл, что в BASH, как и в C оператор "=" означает присваивание, а для равенства используется оператор "==". У вас оператор "=" всегда true, поэтому и происходит остановка.
|
Цитата:
if [ "$REPLY2" == "y" ]; ничего не поменялось. |
А в других if = на == поменяли?
|
Цитата:
Тот же самый скрипт, но без Код:
echo Where do you want to create virtual host? Тут что-то с логикой из за этого select блока. |
Кроме того, вместо if можно использовать case, а обработчики Apache2 и Apaceh1.3 тоже вынести в функции.
case равносильно if...elif...fi |
Переписал в таком виде, с кейсами. Теперь он вовсе не понимает функцию select. Ругается на ошибку синтаксиса из за последнего done. Если done убрать, ругается на то, что функция select не закрыта.
Конечно я могу сделать два отдельных скрипта для Apache1.3 и Apache2 - и будет работать. Но так хочется разобраться с select`ом! Код:
#!/bin/bash |
case закрывается оператором esac. Его у вас нет, отсюда проблемы.
|
Цитата:
Но та же самая проблема, что была в IF всё равно осталась. if [ "$REPLY2" == "y" ]; После нажатия y - выполнения скрипта останавливается. Хм.. я понял, выполнения не останавливается. Но продолжается с неправильного места. По-моему снова с блока select. |
http://www.opennet.ru/docs/RUS/bash_...ide/x5210.html
break - тоже нужен в select |
Время: 03:11. |
Время: 03:11.
© OSzone.net 2001-