mancurt
19.04.2005, 19:03
Экспериментирую с getopts.
:~$ man bash
getopts is used by shell procedures to parse positional parameters...
Тестовый скрипт got (getoptstest):
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
ТЗ: скрипт принимает параметры:
-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 - только в конце
:~$ man bash
getopts is used by shell procedures to parse positional parameters...
Тестовый скрипт got (getoptstest):
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
ТЗ: скрипт принимает параметры:
-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 - только в конце