Гайд: синтаксический анализ параметров в 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 упрощает их использование.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *