Гайд: синтаксический анализ параметров в Bash
Скрипт, он же сценарий оболочки Bash — это текстовый файл с набором команд, что нужно выполнить в определённом порядке и/или по определённым условиям. Он нужен для того, чтобы юзеры Linux не вводили много команд. Давайте рассмотрим способы синтаксического анализа параметров в Bash.
* Bash — самый популярный командный интерпретатор в Unix-подобных системах (GNU/Linux).
Парсинг опций в Bash
Стратегия синтаксического анализа опций в Bash состоит в том, чтобы:
- перебрать все аргументы, которые передали вашему сценарию оболочки,
- определить, являются они опцией или нет,
- перейти к следующему аргументу.
Повторяйте этот процесс, пока не останется вариантов.
Начните с простой логической опции (переключатель или флаг, как вам удобно):

В этом коде создаём while цикл. Он служит до тех пор, пока не исчезнут дополнительные аргументы для обработки. if пытается сопоставить любой аргумент, найденный в первой позиции ($1) либо —alpha или -a. (Это произвольные имена параметров, они не имеют особого значения. В реальном сценарии вы можете использовать —verbose и -v для запуска подробного вывода).
Ключевое слово shift заставляет все аргументы сдвигаться на 1, таким образом, что аргумент в положении 2($2) перемещается в положение 1 ($1). Оператор else запускается, когда больше нет аргументов для обработки, что прерывают while цикл.
В конце скрипта на терминал выводится значение $ALPHA.
Протестируйте скрипт:

Обнаружение аргументов в Bash
Существует проблема: лишние аргументы игнорируются.

Чтобы поймать аргументы, которые не предназначены для использования в качестве опций, выгрузите оставшиеся аргументы в массив Bash. Для этого введите:

Протестируйте новую версию скрипта:

Параметры с аргументами
Некоторые параметры требуют отдельного аргумента. Например, вы можете разрешить пользователю устанавливать атрибут (цвет, разрешение изображения) или что-то другое.
Чтобы реализовать это в Bash, вы можете использовать shift, как и с логическими переключателями, но сдвинуть аргументы на 2 вместо 1.

В этом коде можно добавить elif предложение для сравнения аргументов —config и -c. В случае совпадения значение переменной с именем CONFIG устанавливается равным значению второго аргумента (это означает, что для —config требуется аргумент). Все аргументы сдвигаются на 2: 1 — чтобы сдвинуть —config или -c, и 1 — чтобы переместить свой аргумент. Обычно, цикл повторяется до тех пор, пока не останется аргументов, что совпадают.
Вот тест новой версии скрипта:

Итог
Есть и другие способы синтаксического анализа параметров в Bash. Вы можете поочередно использовать case или getopt. Что бы вы ни выбрали, параметры для пользователей являются важными функциями любого приложения, и Bash упрощает их использование.