Linux. Команда getopts

11.03.2018

Теги: BashCLILinuxКоманда

Команды Linux предполагают, что некоторые из переданных аргументов будут опциями. Исторически сложилось так, что это были переключатели в виде одиночных символов, отличающиеся от других параметров стоящей перед ними дефисом. Для удобства некоторые опции могут быть скомбинированы, как в команде ls -lrt.

Чтобы использовать те же методы в скриптах shell, можно использовать команду getopts, которая облегчает задачу. Чтобы увидеть, как она работает, рассмотрим пример:

#!/bin/bash
echo "Начальное значение OPTIND равно $OPTIND"
while getopts ":pq:" option ; do
    case "$option" in
      "p") echo "Найдена опция $option";;
      "q") echo "Опция $option имеет значение $OPTARG";;
      "?") echo "Неизвестная опция $OPTARG";;
      ":") echo "Не передано значение для опции $OPTARG";;
       * ) echo "Произошла неизвестная ошибка";;
    esac
    echo "OPTIND имеет значение $OPTIND"
done

Команда getopts возвращает нулевой код завершения, если опция найдена. Если в командной строке больше не остается аргументов или же текущий аргумент не начинается с дефиса, getopts возвращает ненулевой код завершения.

Первый аргумент, передаваемый команде getopts — список букв, обозначающих опции, которые будут распознаваться, в данном случае p и q. Двоеточие после буквы показывает, что опция требует значения. Первое двоеточие дает указание не показывать обычные сообщения об ошибках, поскольку этот скрипт имеет собственную обработку ошибок.

Второй аргумент, передаваемый команде getopts — имя переменной, которая получит имя найденной опции (в нашем примере option). Если ожидается, что опция будет иметь значение, это значение будет помещено в переменной OPTARG.

Кроме OPTARG, есть еще одна предустановленная переменная OPTIND, которая изначально установлена в 1. Затем она содержит индекс следующего подлежащего обработке параметра.

Если найдена неопознанная опция, переменная option будет содержать ? и OPTARG будет содержать эту неизвестную опцию.

Если найдена опция, которая требует значения, но значения нет, optname будет содержать : и OPTARG будет содержать имя опции, чей аргумент отсутствует.

Результат работы скрипта:

$ ./testopt.sh -p -q
Начальное значение OPTIND равно 1
Найдена опция p
OPTIND имеет значение 2
Не передано значение для опции q
OPTIND имеет значение 3
$ ./testopt.sh -p -q -r -s tuv
Начальное значение OPTIND равно 1
Найдена опция p
OPTIND имеет значение 2
Опция q имеет значение -r
OPTIND имеет значение 4
Неизвестная опция s
OPTIND имеет значение 5

Поиск: Bash • CLI • Linux • Команда

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.