Skip to content

Latest commit

 

History

History
169 lines (137 loc) · 6.99 KB

README.md

File metadata and controls

169 lines (137 loc) · 6.99 KB

Review Assignment Due Date

Знакомство с Bash

points bar

Очередная смешная картинка

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

Задание №1 (2 балла)

Требуется написать скрипт untar, который принимает параметром имя архива <archive> и распаковывает в директорию <archive>.unpacked (если такой директории не существует, то требуется ее создать).

Пример использования

$ ls -1
test.tar
$ untar test.tar
$ ls -1
test.tar
test.tar.unpacked

Вам понадобится работа с позиционными параметрами в Bash.

Задание №2 (2 балла)

Требуется написать скрипт reverse, который выводит строки из входного потока в обратном порядке.

Пример использования

$ cat foo.txt
baz
bar
foo
$ reverse <foo.txt
foo
bar
baz

Вам понадобится read и циклы в Bash.

Задание №3 (3 балла)

Требуется написать скрипт 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.

Задание №4 (3 балла)

Требуется написать скрипт 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"'е.