В результате выполнения этого задания вы научитесь:
- Использовать на практике циклы и функции в bash;
- Использовать команду, которая позволяет "засыпать" скрипту на определенное время;
- Обрабатывать большое количество файлов внутри bash-скриптов;
- Работать с числовыми данными в своих скриптах.
- Установлена операционная система Ubuntu на виртуальную машину или локально и имеется доступ к терминалу (удаленный или из графической оболочки)
- Просмотрены скрипты, рассматриваемые на лекции, которые находятся по ссылке
- Для успешного выполнения задания необходимо написать три bash скрипта.
- На проверку необходимо направить код каждого скрипта и скриншот, демонстрирующий различные сценарии работы данного скрипта.
Напишите скрипт.
Скрипт должен выводить на экран все числа от 1 до 100, которые делятся на 3.
Для выполнения задания используйте цикл.
Напишите скрипт, который каждые 5 секунд будет выводить на экран текущее время и содержимое файла /proc/loadavg
.
Для выполнения задания используйте цикл.
Напишите функцию для подсчета среднего размера файла в директории.
- путь к директории должен передаваться параметром, например
avgfile /home/username
; - функция должна проверять, что такая директория существует, подсчитывать и выводить на экран средний размер файла в ней;
- при подсчете не нужно учитывать поддиректории и символьные ссылки, считать только средний размер файлов в заданной директории.
- для вывода среднего достаточно использовать целочисленное значение (стандартное деление в bash)
Предлагается выполнить задание сначала без открытия подсказки своим способом, при возникновении сложностей воспользоваться подробным алгоритмом решения, который описан ниже.
Подсказка - Примерный алгоритм решения
-
В скрипте объявите функцию. Поместите аргумент в переменную с понятным названием. Проверьте, существует ли заданная в аргументе директория с помощью if.
-
Внутри функции объявите вспомогательные переменные. Одна переменная будет служить для сохранения суммы размеров всех файлов в директории, а другая будет содержать количество файлов.
-
Для перебора файлов внутри директории используйте цикл for.
-
Внутри цикла с помощью if проверяйте, является ли данный объект файлом.
-
Если это файл, то к переменной суммы добавляйте размер файла и увеличивайте на один переменную с количеством файлов (получить размер одного файла можно с помощью
stat -c "%s" filename
). -
После выхода из цикла for (перебора всех файлов в директории), разделите значение переменной с суммой размеров файлов на количество этих файлов и выведите результат на экран.
-
В конце скрипта, вызовите только что написанную функцию с аргументом, например
avgfile $1
-
Запускайте скрипт
./script3.sh /home/username
и смотрите результат. -
(необязательно) Если все работает, данную функцию можно добавить к себе в
.bash_profile
и использовать для работы.
Эти задания дополнительные (не обязательные к выполнению) и никак не повлияют на получение вами зачета по этому домашнему заданию. Вы можете их выполнить, если хотите глубже и/или шире разобраться в материале.
Напишите свой калькулятор.
В нем реализуйте простейшие арифметические операции: «+»; «-»; «*»; «/».
Считывание параметров реализуйте с помощью read
и select
.
- Сначала пользователю требуется выбрать математическую операцию через select
- Затем пользователю предлагается ввести два числа через команду read.
- Производится проверка вводимых чисел, что они являются числами
- Производится требуемая математическая операция и выводится результат или ошибка.
- При желании, можно реализовать деление чисел с плавающей запятой
Примечание: постарайтесь максимально защититься от ошибок, т.к. пользователи любят написать строку вместо числа.
Домашнее задание выполните в Google Docs и отправьте в личном кабинете на проверку ссылку на ваш документ.
Название файла должно содержать название лекции и фамилию студента. Пример названия: "Программирование на Bash : Циклы и функции - Иван Иванов"
Перед тем как выслать ссылку, убедитесь, что ее содержимое не является приватным (открыто на просмотр всем, у кого есть ссылка).
В файле должен присутствовать номер задания, текст задания, код скрипта и скриншоты, демонстрирующие корректную работу скрипта.
Любые вопросы по решению задач задавайте в чате учебной группы в Discord.
Зачет - выполнены все задания, приложен скрипт, приложены соответствующие скриншоты, в выполненных заданиях нет противоречий и нарушения логики
На доработку - задание выполнено частично или не выполнено, в логике выполнения заданий есть противоречия, скрипты не работают или работают не во всех случаях.