Программируем в ракушку SHELL. Часть 2 : getopts
Экспериментирую с [b]getopts[/b].
:~$ man bash
getopts is used by shell procedures to parse positional parameters...
Тестовый скрипт got ([b]g[/b]et[b]o[/b]pts[b]t[/b]est):
[code]ALPHA=default
BETTA=default
GAMMA=default
SOMETEXT=default
OPTERR=0
usage()
{
echo "Usage: `basename $0` [-a] [-b betta-data] [-c gamma-data] sometext"
exit 1
}
if [ $# = 0 ]; then
usage
fi
while getopts ab:c: OPTION
do
case $OPTION in
a) ALPHA="a parametr on"
;;
b) BETTA=$OPTARG
;;
c) GAMMA=$OPTARG
;;
?) usage
;;
esac
done
shift `expr $OPTIND - 1`
if [ $# != 1 ]
then
usage
else
SOMETEXT="$@"
fi
echo "alpha = " $ALPHA
echo "betta = " $BETTA
echo "gamma = " $GAMMA
echo "sometext = " $SOMETEXT[/code]
ТЗ: скрипт принимает параметры:
-a : просто переключатель, необязательный
-b, -c : опции с указанием значений, необязательные
sometext : просто текст (одно слово), обязательный.
:~$ got -b betta -a test
alpha = a parametr on
betta = betta
gamma = default
sometext = test
:~$ got -b betta test -a
Usage: got [-a] [-b betta-data] [-c gamma-data] sometext
Т.е. если указать sometext до одного из ключей - ошибка. Как можно обойти это "правило" - ключи, обрабатываемые getopts, можно ставить в разном порядке, а sometext - только в конце