Для решения каждого из заданий необходимо выписать последовательность команд,
выполняющих то, что требуется в условии, в исполняемый файл 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"
в этом задании. Вы могли заметить, что после прохождения тестов, запускается
еще один "job" под названием Check solutions
, который запускает ShellCheck
на всех
скриптах в директории solution
.
Бонусное задание заключается в прохождении всех проверок, которые репортует ShellCheck
в этом "job"'е.