Аргументы команд
  #
Васильев Андрей Михайлович, 2024
Версии презентации
  Структура команд Bash
  #
После ввода команды в эмулятора терминала и нажатия клавиши Enter строка
передаётся в командный интерпретатор
Общая структура простого запроса интерпретатору
команда --аргумент1 аргумент2 аргумент3
 
Интерпретатор разбивает пришедшую строку на слова по непечатным символам
Команда определяет действие, которое вы хотите выполнить, а аргументы уточняют
поведение. Точное воздействие аргументов зависит от разработчиков конкретной
команды, один и тот же аргумент по названию может по-разному интерпретироваться
- Команда 
cd меняет рабочий каталог, её необязательный аргумент говорит куда
надо его изменить 
- Команда 
touch создаёт файлы, аргументы указывают какие файлы надо создать и
в каком состоянии 
  Аргументы, параметры и ключи
  #
- На первом месте в выражении, которое передаётся интерпретатору, находится
команда для исполнения
 
- Все остальные элементы называются аргументами или параметрами
 
В рамках языка Си приложение получает данные через аргументы функции main:
int main(int argc, char* argv[])
 
- Переменная 
argc содержит количество аргументов приложения 
- Переменная 
argv содержит список ссылок на строки 
- Разработчик может обработать данные строки по своему желанию
 
  Компиляция Си-приложений
  #
Для компиляции Си-приложений необходим компилятор языка cc:
В рамках 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
- Состоит из одного слова
 
- Перед словом стоит двойной дефис
 
- Может служить переключателем, как и короткий ключ
 
- Может принимать значение
 
- Для указания значения такому ключу необходимо его передать с помощью символа
= или указать его после пробела 
- Обычно человек может воспринять без чтения документации
 
Некоторые ключи имеют как короткую, так и длинную форму
- Короткие ключи позволяют экономить время на набор
 
- Значение длинных ключей зачастую легче понять при чтении
 
- Короткие ключи можно объединять друг с другом в отличие от длинных