Аргументы скрипта

Тема дорожной карты · Bash

getopts — встроенная команда Bash для разбора коротких параметров командной строки в shell-скриптах; используется в шаблоне while getopts "abc:" opt; do case $opt in, где двоеточие после буквы означает, что этот параметр принимает аргумент, хранящийся в $OPTARG. Использование getopts вместо ручного разбора позиционных параметров делает Bash-скрипты следующими стандартным соглашениям командной строки Linux, позволяя параметрам вроде -v, -o output.txt и комбинированным флагам вроде -vf работать именно так, как ожидают пользователи от любого POSIX-совместимого инструмента. Встроенная команда getopts автоматически продвигается по аргументам, обновляя $OPTIND, чтобы скрипт мог вызвать shift $((OPTIND - 1)) после цикла, оставив в $@ только неопционные аргументы для дальнейшей обработки. В отличие от внешней команды getopt, встроенная команда Bash getopts корректно обрабатывает аргументы с пробелами без лишних манипуляций с кавычками, что делает её предпочтительным выбором для переносимых shell-скриптов на Linux. Реализация getopts в скриптах автоматизации обеспечивает им профессиональный интерфейс командной строки, органично встраивающийся в конвейеры и самодокументируемый через функцию показа использования.

Как это работает

Аргументы скрипта: встроенный getopts парсит короткие опции (-a -b value -c). Для длинных (--verbose) + сложного парсинга — внешний getopt (GNU) или ручной while-цикл над "$@" с case. Конвенция: -- разделяет опции от позиционных аргументов; -h / --help показывает usage. Инструмент argbash генерирует парсеры из декларативной спеки.

Когда применять

getopts — для простых скриптов с парой single-letter опций. Ручной парсер — когда нужны long-options + несколько позиционных аргументов. Всегда печатайте usage на -h или плохой input — будущий вы спасибо скажет. Валидируйте required-args рано; падайте с понятной ошибкой.

Типичные ошибки

Ловушки Аргументы скрипта: путаница getopts (встроенный, только short opts) и getopt (внешний, long opts только в GNU); неверная обработка -- (позиционные args с - парсятся как опции); нет usage на ошибке (юзеру читать ваш код, чтобы понять args).

Связанные понятия

Полезные ресурсы