Аргументы команд

Аргументы команд #

Васильев Андрей Михайлович, 2024

Версии презентации


Структура команд Bash #

После ввода команды в эмулятора терминала и нажатия клавиши Enter строка передаётся в командный интерпретатор

Общая структура простого запроса интерпретатору

команда --аргумент1 аргумент2 аргумент3

Интерпретатор разбивает пришедшую строку на слова по непечатным символам

Команда определяет действие, которое вы хотите выполнить, а аргументы уточняют поведение. Точное воздействие аргументов зависит от разработчиков конкретной команды, один и тот же аргумент по названию может по-разному интерпретироваться

  • Команда cd меняет рабочий каталог, её необязательный аргумент говорит куда надо его изменить
  • Команда touch создаёт файлы, аргументы указывают какие файлы надо создать и в каком состоянии

Аргументы, параметры и ключи #

  • На первом месте в выражении, которое передаётся интерпретатору, находится команда для исполнения
  • Все остальные элементы называются аргументами или параметрами

В рамках языка Си приложение получает данные через аргументы функции main:

int main(int argc, char* argv[])
  • Переменная argc содержит количество аргументов приложения
  • Переменная argv содержит список ссылок на строки
  • Разработчик может обработать данные строки по своему желанию

Компиляция Си-приложений #

Для компиляции Си-приложений необходим компилятор языка cc:

cc main.c -o app

В рамках GNU/Linux самым распространённым компилятором является компилятор GNU C Compiler, gcc


Реализация обработки аргументов #

Разработчики стремятся снизить свою задачу, а также предоставить пользователям знакомый интерфейс для работы, поэтому используют «стандартные» библиотеки

Для языка Си в GNU/Linux доступны следующие библиотеки для обработки аргументов приложения:

  • getopt

    #include <unistd.h>
    int getopt(int argc, char * const argv[], const char *optstring);
  • Argp

    #include <argp.h>
    error_t argp_parse (const struct argp *argp, int argc, char **argv,
      unsigned flags, int *arg_index, void *input)

Другие языки программирования предлагают свои библиотеки, чьё поведение схоже с поведением данных двух библиотек


Категории аргументов #

  • Аргументы делятся на 2 группы: позиционные аргументы и ключи
    • Ключи обычно не являются обязательными для указания
    • Ключи модифицируют поведение приложения
    • Смысл ключа зависит от его названия и его значения
    • Смысл позиционного аргумента зависит от его места и значения
    • Позиционные аргументы часто являются обязательными, например указывают путь к файлу с данными для обработки
  • Разработчик может использовать каждый из этих элементов на своё усмотрение
  • Порядок аргументов зачастую важен, следует уделять этому внимание
  • Обычно пользователи сначала указывают ключи, за которыми идут позиционные аргументы

Команду в Bash можно рассмотреть как вызов функции: на первом месте находится её название, а далее перечислены аргументы


Короткие ключи #

Короткий, однобуквенный ключ: -l, -a

  • Состоит из одного символа
  • Перед символом ставится один дефис
  • Обычно служит для включения или выключения одного аспекта поведения приложения
  • Короткие ключи зачастую можно комбинировать: ls -l -a, ls -al

Ключи могут:

  • Иметь логическое значение: указан / не указан
    • Для приложения ls если указан флаг -a, то надо выводить все файлы
    • Зачастую ключи несут именно логическое значение
  • Может иметь значение. Рассмотрим команду cal -c 2 2020
    • Ключ -c, количество колонок, принимает в качестве аргумента число 2
    • Аргумент 2020 — позиционный, указывает год, для которого надо показать календарь

Длинные ключи #

Длинный ключ: --size, --width=100, --months 5

  • Состоит из одного слова
  • Перед словом стоит двойной дефис
  • Может служить переключателем, как и короткий ключ
  • Может принимать значение
  • Для указания значения такому ключу необходимо его передать с помощью символа = или указать его после пробела
  • Обычно человек может воспринять без чтения документации

Некоторые ключи имеют как короткую, так и длинную форму

  • Короткие ключи позволяют экономить время на набор
  • Значение длинных ключей зачастую легче понять при чтении
  • Короткие ключи можно объединять друг с другом в отличие от длинных

© A. M. Васильев, 2024, CC BY-SA 4.0, andrey@crafted.su