Экспериментирую с 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 - только в конце
Социальные закладки