разбор параметров командной строки в скриптах с помощью getopts
для разбора параметров в скриптах чаще всего используются две программы - getopt и getopts
первая для начала довольно сложна и излишне функциональна, поэтому рассмотрим разбор на примере более простой getopts
стандартный скелет скрипта
#!/bin/sh # while getopts OPTIONS_LIST option do case $option in OPTION) ACTION;; esac done shift $((OPTIND - 1)) ### ТЕЛО СКРИПТА ###
getopts понимает только простые однобуквенные опции, либо вообще без, либо с обязательным аргументом.
все опции, которые программа должна обрабатывать указываются вместо OPTIONS_LIST. если опция требует обязательный параметр, то после ее буквы надо поставить двоеточие.
ПРИМЕР: rvo:x
такая строчка показывает, что надо обрабатывать опции -r, -v, -o и -x, причем -o требует аргумента.
далее указывается переменная, куда будет сохранятся найденная опция. в данном случае это option
для обработки добавляем внутрь case строчки вида НУЖНАЯ ОПЦИЯ) ДЕЙСТВИЕ ;;
ПРИМЕР:
r) echo "Option -r found!" ;;
если найдена неправильная опция, то в option будет записан знак вопроса. если у опции есть аргумент, он будет записан в переменную $OPTARG
ПРИМЕР:
o) echo "Option -o found, with argument '$OPTARG'!" ;;
вот собственно и весь разбор. строчка shift $((OPTIND - 1)) сдвигает позиционные параметры так, что в $1 оказывается первый параметр не являющийся опцией, что очень удобно, если, к примеру, после опций передается имя файла, который надо обработать...
- 4258 просмотров

while : ; do case $1 in OPTION) ACTION [shift];; *) break;; esac shift doneпремущество то что в первом вариантре опции без параметров можно комбинировать например как в том примере -evo будет тоже самое что -e -v -o -- Signature invent in progress 19% #.........да дело даже не в этом...
основной плюс - обработка ошибок, типа неверных опций или пропуска параметров...
это в том варианте так же это все делается без проблем
--
Signature invent in progress 19% #.........
Отправить комментарий