Главная > Среда и утилиты > getopt

getopt: Разбор опций командной строки

getopt — это утилита, используемая в скриптах оболочки для разбора аргументов командной строки стандартизированным способом. Она помогает скриптам обрабатывать как короткие опции (-a), так и длинные опции (--long-option), а также правильно разделять аргументы опций. Это необходимо для улучшения пользовательского интерфейса и повышения надежности скрипта.

Обзор

getopt — мощный инструмент для обработки сложных опций командной строки в скриптах оболочки. Он обеспечивает стандартизированный разбор опций, повышая надежность скрипта и предоставляя удобный для пользователя интерфейс. Особенно полезен при необходимости обработки как коротких, так и длинных опций одновременно.

Основные возможности

  • Поддержка коротких опций (-a) и длинных опций (--long-option)
  • Автоматическое разделение и переупорядочивание аргументов опций
  • Обработка ошибок и идентификация нестандартных опций
  • Повышение гибкости и удобства использования скрипта

Основные опции

getopt предоставляет различные опции для определения и разбора опций в скрипте. Эти опции позволяют указать, как должны интерпретироваться аргументы командной строки.

Определение опций

Управление поведением

Сгенерированная команда:

Комбинируйте команды.

Описание:

`getopt` Запускает команду.

Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.

Примеры использования

Рассмотрим различные сценарии разбора опций командной строки с помощью getopt. Следующие примеры демонстрируют, как можно использовать getopt в скриптах.

Базовый разбор коротких опций

getopt -o a:b -- "$@"

Разбор опций, где `-a` требует аргумент, а `-b` — нет. `--` разделяет опции и неопциональные аргументы.

Разбор коротких и длинных опций вместе

getopt -o a:b -l alpha:,beta -- "$@"

Определение коротких опций с помощью `-o` и длинных опций с помощью `-l`. `--alpha` требует аргумент, а `--beta` — нет.

Использование getopt в скрипте оболочки

#!/bin/bash

# Определение опций: -a (требуется аргумент), -b (не требуется аргумент)
#           --alpha (требуется аргумент), --beta (не требуется аргумент)
TEMP=$(getopt -o a:b --long alpha:,beta -- "$@")

# Завершить скрипт, если getopt вернул ошибку
if [ $? -ne 0 ]; then
    echo "Ошибка разбора опций."
    exit 1
fi

# Установить вывод getopt в качестве позиционных параметров текущей оболочки
# eval обрабатывает проблемы с кавычками, а set -- заменяет существующие аргументы
eval set -- "$TEMP"

# Цикл обработки опций
while true; do
    case "$1" in
        -a|--alpha)
            echo "Обнаружена опция A/alpha. Значение: $2"
            shift 2 # Пропустить опцию и аргумент
            ;;
        -b|--beta)
            echo "Обнаружена опция B/beta."
            shift # Пропустить только опцию
            ;;
        --)
            shift # Пропустить разделитель опций и неопциональных аргументов
            break
            ;;
        *)
            echo "Внутренняя ошибка!"
            exit 1
            ;;
    esac
done

echo "\nОставшиеся неопциональные аргументы: $@"

Типичная структура скрипта, где вывод getopt устанавливается в качестве позиционных параметров текущей оболочки с помощью `eval set --`, а опции обрабатываются с помощью циклов `while` и `case`.

Советы и рекомендации

Советы и рекомендации по эффективному использованию getopt. Особое внимание следует уделить конструкции `eval set --` и обработке ошибок.

Основные советы

  • Используйте `eval set -- "$(getopt ...)"`: Это стандартный способ безопасной установки вывода `getopt` в качестве позиционных параметров текущей оболочки. `eval` решает проблемы с кавычками, а `set --` очищает существующие позиционные параметры и заменяет их результатом `getopt`.
  • Внимание к двоеточию при определении опций: Двоеточие после опции означает, что эта опция требует аргумента. Два двоеточия (::) означают необязательный аргумент, но это может работать по-разному в зависимости от версии или реализации `getopt`, поэтому будьте осторожны.
  • Важность `--`: При вызове `getopt` важно использовать `--` для четкого разделения опций и неопциональных аргументов. Это гарантирует, что `getopt` передаст остальные аргументы как есть после обработки всех опций.
  • Обработка ошибок: `getopt` возвращает ненулевой код завершения при ошибках разбора. Рекомендуется проверять это в скрипте, выводить соответствующее сообщение об ошибке и завершать работу.


Те же команды в категории