Вебинар 08.02.2022
Цели занятия
после занятия вы сможете:
выровнять знания в области Linux-based серверов.
Краткое содержание
-
актуальность Linux систем (почему сервера в основном * работают на этой ОС);
-
процессы, потоки;
-
пользователи, привилегии;
-
ряд полезных утилит (top, grep etc);
-
bash скрипты.
Результаты
взаимодействовать с Linux и писать bash-скрипты.
Преподаватель
Дмитрий Панкрашов
Дата и время
7 февраля, понедельник в 20:00
Длительность занятия: 90 минут
Домашнее задание
Тема: Bash
Цель: Научиться писать bash-скрипты для решения повседневных задач
Описание/пошаговая инструкция выполнения домашнего задания:
Задача №1. Сумма чисел
Написать консольное приложение (bash-скрипт), который принимает два числа и выводит их сумму в стандартный вывод.
Например:
./sum.sh 1.5 -7
Если предоставлены неверные аргументы (для проверки на число можно использовать регулярное выражение) вывести ошибку в консоль.
Если Вы запускаете скрипты на базе Docker под Windows 10, то поведение функции sort по умолчанию отличается от стандартного в linux (числа сортируются как числа, а не как строки)
Мое решение: sum_int.sh
#!/bin/bash # Otus PHP course 1.2. Linux # Написать консольное приложение (bash-скрипт), который принимает два числа и выводит их сумму в стандартный вывод. # check that required arguments are set if [ -z "$1" ] ; then echo "Error: missing argument #1" >&2; exit 1 fi if [ -z "$2" ] ; then echo "Error: missing argument #2" >&2; exit 1 fi # assign values X=$1 Y=$2 # check that numbers are passed re='^[0-9]+$' if ! [[ $X =~ $re ]] ; then echo "Error: Not a number: $X" >&2; exit 1 fi if ! [[ $Y =~ $re ]] ; then echo "Error: Not a number: $Y" >&2; exit 1 fi declare -i SUM=0 SUM+=$X SUM+=$Y echo "Sum: $SUM"
Доработанная версия, для сложения вещественных и отрицательных чисел:
sum_float.sh
#!/bin/bash # Otus PHP course 1.2. Linux # Написать консольное приложение (bash-скрипт), # который принимает два числа и выводит их сумму в стандартный вывод.. # (!) Числа для суммирования могут быть отрицательными и вещественными. # check that required arguments are set if [ -z "$1" ] ; then echo "Error: missing argument #1" >&2; exit 1 fi if [ -z "$2" ] ; then echo "Error: missing argument #2" >&2; exit 1 fi # assign values X=$1 Y=$2 # check that numbers are passed #re='^[.-0-9]+$' re='^-?[0-9]+[.,]?[0-9]*$' if ! [[ $X =~ $re ]] ; then echo "Error: Not a number: $X" >&2; exit 1 fi if ! [[ $Y =~ $re ]] ; then echo "Error: Not a number: $Y" >&2; exit 1 fi awk "BEGIN{ print $X + $Y }"
Задача №2. Города
Имеется таблица следующего вида:
id user city phone 1 test Moscow 1234123 2 test2 Saint-P 1232121 3 test3 Tver 4352124 4 test4 Milan 7990923 5 test5 Moscow 908213
Таблица хранится в текстовом файле.
Вывести на экран 3 наиболее популярных города среди пользователей системы, используя утилиты Линукса.
Подсказка: рекомендуется использовать утилиты uniq, awk, sort, head.
Мои подсказки:
-
Создайте гистограмму или список частот наиболее популярных команд, используемых в сеансе bash https://translated.turbopages.org/proxy_u/en-ru.ru.1e5dc802-6202b885-09a9b389-74722d776562/https/stackoverflow.com/questions/18301908/create-a-histogram-or-frequency-list-of-most-popular-commands-used-in-bash-sessi
Мое решение:
#!/bin/bash # Otus PHP course, Leson 2: Linux basics # Task: Find 3 most popular cities from cities list stored in file cities.txt cat cities.txt | awk '($3 ~ /^[[:alnum:]]+$/) { ++a[$3]; } END { for (i in a) printf("%s%" (l - length(i) + 1) "s%5.2f%%n", i, " ", (a[i])); }' | sort -r -nk2 | head -n 3 | awk '{ print $1}'
Критерии оценки:
-
Числа для суммирования могут быть отрицательными и вещественными.
-
Пакет bc для дистрибутивов Linux не является пакетом по умолчанию. Либо предусмотрите момент, когда пакет не установлен, либо решите проблему при помощи других средств.
-
Калькулятор — 5 баллов
-
Сортировщик — 5 баллов
Рекомендуем сдать до: 09.02.2022
Нет комментариев