|
GETOPTS(1)НАЗВАНИЕ СИНТАКСИС getopts цепочка_опций имя [аргумент ...] ОПИСАНИЕ Цепочка_опций должна содержать флаги, которые будут распознаваться shell-процедурой, использующей getopts. Если за флагом следует двоеточие, то предполагается, что опция имеет аргумент или группу аргументов, которые должны отделяться от флага пробелами или табуляциями. После каждого вызова getopts помещает следующую опцию в переменную имя, а номер аргумента, который должен быть обработан следующим, - в переменную OPTIND. Всегда, когда запускается shell или shell-процедура, OPTIND получает значение 1. Если опции требуется аргумент, то getopts помещает его в переменную OPTARG. Если встретилась некорректная опция, то в переменную имя помещается ?. Если опции кончились, getopts возвращает ненулевой код завершения. Можно использовать специальную опцию --, чтобы отметить конец опций. По умолчанию команда getopts разбирает позиционные параметры вызвавшей ее shell-процедуры, но если указать дополнительные аргументы, то getopts будет разбирать их. ПРИМЕР while getopts abo: c do case $c in a | b) FLAG=$c;; o) OARG=$OPTARG;; ?) echo $USAGE exit 2;; esac done shift `expr $OPTIND - 1`При такой обработке следующие строки оказываются эквивалентными: cmd -a -b -o "xxx z yy" file cmd -a -b -o "xxx z yy" -- file cmd -ab -o xxx,z,yy file cmd -ab -o "xxx z yy" file cmd -o xxx,z,yy -b -a file ПРИМЕЧАНИЯ
ФАЙЛЫ /usr/bin/getopt Старая версия программы разбора опций. /usr/lib/getoptcvt Программа перевода shell-проце- дур, использовавших getopt, на getopts. СМ. ТАКЖЕ ДИАГНОСТИКА ПРЕДОСТЕРЕЖЕНИЯ cmd -aboxxx fileЗдесь нарушено правило 5: опция с аргументом не должна быть в одной группе с остальными опциями. cmd -ab -oxxx fileНарушено правило 6: после опции, которой требуется аргумент, должен быть пробел или табуляция. Изменение значения переменной OPTIND или разбор различных наборов аргументов могут привести к непредсказуемому результату. |
|