Аргументы команд #
Васильев Андрей Михайлович, 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 доступны следующие библиотеки для обработки аргументов приложения:
- 
#include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); - 
#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
- Состоит из одного слова
 - Перед словом стоит двойной дефис
 - Может служить переключателем, как и короткий ключ
 - Может принимать значение
 - Для указания значения такому ключу необходимо его передать с помощью символа
=или указать его после пробела - Обычно человек может воспринять без чтения документации
 
Некоторые ключи имеют как короткую, так и длинную форму
- Короткие ключи позволяют экономить время на набор
 - Значение длинных ключей зачастую легче понять при чтении
 - Короткие ключи можно объединять друг с другом в отличие от длинных