mscrack
@mscrack

Linux bash virtualhost apache. Как передать параметры?

Я плохо знаю bush. Хочу написать скрипт который бы создавал виртуальные хосты для апача. Скрипт я написал все работает. Но потом появилась идея добавить возможность указывать алиасы к виртуальному хосту. Все это я планировал реализовать по соответствующим флагам.
Например:
addvhost -host example.dev -dir /home/domains/ -alias adm.example.loc

Такая идея возникла когда решил попробовать Yii2 advanced.
Сейчас есть такой скрипт:
#!/bin/bash 

set -e

ME=`basename $0`

function printHelp() {
    echo "Скрипт добавления виртуальных хостов"
    echo
    echo "Используйте: "$ME" с опциями:"
    echo "  -h     имя виртуального хоста"
    echo "  -a     алиас"
    echo "  -d     путь до директории"
    echo
    exit 0; 
}

function writeHost() {
    echo $host
echo $alias
echo $path

тут само добавление и тд..
}

# Если скрипт запущен без аргументов, открываем справку.
if [ $# = 0 ]; then
    printHelp
fi


while getopts "h:a:d:" opt;
do
    case $opt in
 	h) host=$OPTARG;
	  writeHost
	  ;;
	a) alias=$OPTARG;
	  writeHost
	  ;;
	d) path=$OPTARG;
	  writeHost
	  ;;
	*) echo "Неправильный параметр";
	   echo "Для вызова справки запустите $ME -help";
	   exit 1
	   ;;
	esac
done


Собственно в чем проблема. если вызвать скрипт то в консоли будет следующее
garik@work ~ $ sudo addvhost1 -h text -d dddd -a alias
text

text

dddd
text
alias
dddd

т.е. getopts по циклу проходит и все параметры видны только когда очередь до aliasa доходит. Как это обойти, не пойму.. Может знает кто? или хотя-бы скажите куда двигаться? может вместо getopts есть что то более подходящее?
Сам скрипт нашел на хабре в какой то статье, просто немного под свои задачи адаптировать пытаюсь..
  • Вопрос задан
  • 293 просмотра
Решения вопроса 1
@kryvel
Системный администратор
Так все хорошо ведь, не?
getopts обрабатывает все параметры, а Вы после того как он все сделает запустите writeHost
while getopts "h:a:d:" opt;
do
    case $opt in
 	h) host=$OPTARG;
    ;;
  a) alias=$OPTARG;
    ;;
  d) path=$OPTARG;
    ;;
  *) echo "Неправильный параметр";
     echo "Для вызова справки запустите $ME -help";
     exit 1
     ;;
  esac
done

writeHost
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы