Для решения каждого из заданий необходимо выписать последовательность команд,
выполняющих то, что требуется в условии, в исполняемый файл solution/<name>,
где <name> - название скрипта, указанное в соответствующем задании.
Important
Файл с решением solution/<name> необходимо сделать исполняемым, с помощью команды
$ chmod +x solution/<name>Добавление в PATH
Для запуска скрипта без указания полного пути до него, можно его скопировать
(или создать символическую ссылку
на скрипт) в какую-либо директорию, входящую в переменную окружения PATH.
Стандартной директорией для пользовательских скриптов является ~/.local/bin,
которая по умолчанию должна быть включена в PATH.
Отладка
Для локальной отладки можно запустить ваше решение с помощью следующей команды:
$ bash -xe solution/<name>Параметры -xe (-x и -e) включают логирование выполненных команд и
завершение исполнения при первой ошибке, что бывает очень полезно при отладке скриптов.
Более подробное описание этих и других опций утилиты bash можно получить с помощью
$ bash -c "help set"Требуется написать скрипт untar, который принимает параметром имя архива <archive>
и распаковывает в директорию <archive>.unpacked (если такой директории не существует,
то требуется ее создать).
Пример использования
$ ls -1
test.tar
$ untar test.tar
$ ls -1
test.tar
test.tar.unpackedВам понадобится работа с позиционными параметрами в Bash.
Требуется написать скрипт reverse, который выводит строки из входного потока
в обратном порядке.
Пример использования
$ cat foo.txt
baz
bar
foo
$ reverse <foo.txt
foo
bar
bazТребуется написать скрипт addsuffix, который принимает суффикс,
список файлов и добавляет указанный суффикс ко всем переданным файлам.
Пример использования
$ ls -1
foo.c
hello.c
hello.sh
test.sh
test.tar
$ addsuffix '.bak' ./*.sh
$ ls -1
foo.c
hello.c
hello.sh.bak
test.c
test.sh.bak
test.tar
$ addsuffix 'pp' foo.c hello.c
$ ls -1
foo.cpp
hello.cpp
hello.sh.bak
test.c
test.sh.bak
test.tarВам понадобится работа с позиционными параметрами, циклами и подстановка параметров в Bash.
Требуется написать скрипт fizzbuzz.sh, который принимает аргументом положительное число n
и выводит все числа от 1 до n по следующим правилам:
- Если число делится на 3, вместо числа выводить
Fizz; - Если число делится на 5, вместо числа выводить
Buzz; - Если число делится и на 3 и на 5, вместо числа выводить
Fizz Buzz; - Иначе выводить само число.
Пример использования
$ fizzbuzz.sh 20
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
BuzzВам понадобится работа с арифметическими вычислениями и циклами в Bash.
Для проверки корректности ваших скриптов можно воспользоваться статическим анализатором ShellCheck, который помогает найти потенциальные источники ошибок в Shell скриптах. Например, большинство проблем, связанных с отсутствием двойных кавычек при использовании переменных.
Помимо онлайн версии, эту утилиту также можно установить и запустить локально, чтобы
автоматически проверять корректность ваших скриптов, как это сделано в "workflow"
в этом задании. Вы могли заметить, что помимо прохождения тестов, запускается
еще один "workflow" под названием Pre-check, в котором есть "job" Check solutions,
который запускает ShellCheck на всех скриптах в директории solution.
Бонусное задание заключается в прохождении всех проверок, которые репортует ShellCheck в этом "job"'е.
