getopts - встроенная команда Bash, используемая для разбора аргументов, передаваемых скрипту из командной строки. Она позволяет обрабатывать серии опций, объединенных в один аргумент и дополнительные аргументы, передаваемые опцией.
Пример:
# script_name -abc -d /home/user
Вместе с командой getopts используются скрытые переменные: $OPTIND и $OPTARG.
$OPTIND | Индекс опции (OPTion INDex). |
$OPTARG | Дополнительный аргумент опции (OPTion ARGument). |
Символ двоеточия, следующий за именем опции, указывает на то, что она имеет дополнительный аргумент.
while getopts ":abcde:fg" Option
Обычно getopts упаковывается в цикл while
, в каждом проходе цикла извлекается очередная опция и ее аргумент (если он имеется), обрабатывается, затем уменьшается на 1 скрытая переменная $OPTIND
и выполняется переход к началу новой итерации.
Опциям, передаваемым в сценарий из командной строки, должен предшествовать символ "минус" (-) или "плюс" (+). Этот префикс (- или +) позволяет getopts
отличать опции от прочих аргументов. Фактически, getopts
не будет обрабатывать аргументы, если им не предшествует символ - или +, выделение опций будет прекращено как только встретится первый аргумент.
Типичная конструкция цикла while
с getopts
несколько отличается от стандартной из-за отсутствия квадратных скобок, проверяющих условие продолжения цикла.
Можно смотреть как работает getopts с помощью следующего скрипта.
test-getopts |
#!/bin/bash NO_ARGS=0 usage () { if [ $# -eq "$NO_ARGS" ] # Сценарий вызван без аргументов? while getopts "abc:d:ef" Option exit 0 |
Попробуйте позапускать его так:
test-getopts -abc с-opt
test-getopts -abefd d-opt
А теперь так:
test-getopts -abcdef
test-getopts -cd d-opt
Связано такое поведение getopts с тем, что опция -c
ожидает дополнительный аргумент.
Добавить комментарий