Документация находится по ссылке.
-
Выкачать нужную ветку репозитория:
git clone --single-branch --branch hw_04 https://github.com/Soykaa/software-design-2022-hse
-
Зайти в папку:
software-design-2022-hse
-
Для запуска тестов ввести команду:
./gradlew test
Если вывелась надпись
BUILD SUCCESSFUL
, значит все тесты прошли, иначе выведется название упавшего теста -
Для запуска приложения ввести следующие команды:
./gradlew assemble
java -jar build/libs/*.jar
echo [arguments]
- принимает на вход список аргументов, выводит их через пробел. В случае, если аргументы не переданы,
выводит пустую строку
pwd
- выводит абсолютный путь до текущей рабочей директории, не принимает аргументы
wc [file_name]
- в случае, если параметр передан, выводит количество строк, слов и байт в файле с
названием file_name
, иначе выводит количество строк, слов и байт в стандартном вводе
cat [file_name]
- в случае, если параметр передан, выводит содержимое файла file_name
, иначе выводит содержимое
стандартного ввода
<variable_name>=<value>
- присваивает переменной variable_name
значение value
. В случае, если во вводе пользователя встречается несколько символов '='
, разделение происходит по пепрвому из них
<outer_command> [arguments]
- вызывает внешнюю команду с названием outer_command
и аргументами arguments
, если
они переданы
$<variable_name>
используется для выполнения подстановки значения переменной variable_name
. В случае, если значение переменной с таким именем не было определено ранее, то будет выведено сообщение об ошибке.
В случае, если имя переменной не введено, то есть после $
следует один из символов '
, "
, ' '
, |
, то подстановка выполнена не будет, символ $
останется в токене
Подстановка не будет выполнена в случае, если $<variable_name>
находится внутри одинарных кавычек. Если же $<variable_name>
внутри двойных кавычек, то подстановка выполняется
grep <regular_expression> [file_name]
- выводит строчки файла file_name
, в которых был найден паттерн regular_expression
. В случае, если файл не задан, то паттерн ищется в строчках стандартного ввода.
Поддерживается использование команды с флагами:
-
grep -i <regular_expression> [file_name]
- регистронезависимый поиск -
grep -w <regular_expression> [file_name]
- поиск только слова целиком -
grep -A <count> <regular_expression> [file_name]
- числоcount
обязательно должно следовать за флагом-A
, оно показывает сколько строк после совпадения надо распечатать
exit
- завершает работу приложения
- Для поиска совпадений используется class Pattern (ссылка, по которой, в том числе, можно посмотреть примеры регулярных выражений).
- Для разбора аргументов, передаваемых команде, используется библиотека Apache Commons CLI, выбор в ее пользу был
сделан из-за того, что с данной библиотекой мы уже знакомы и работали в другом проекте.
Другие рассматриваемые библиотеки:
- JCommander - тоже хорошая библиотека для парсинга аргументов командной строки, но опыта работы с ней у нас не было
- JSAP: the Java Simple Argument Parser - недостаточно примеров использования, чтобы понять как работать с библиотекой
- JOpt Simple - недостаточно документации, не понятно как использовать
На вход приложению может быть передано несколько команд, разделенных символом |
, при этом вывод команды передается на вход следующей, если такая имеется.
Пример: echo 123 | wc
- команда wc
будет работать с тем, что вывела команда echo 123
Пайпы всегда должны разделять команды (пример некорректного ввода: echo 123 | | wc
), ввод не может начинаться с символа пайпа или заканчиваться им.
Если в последовательности пайпов встретилась команда exit
, то приложение завершает свою работу.