(звезда) Вебинар 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 наиболее популярных города среди пользователей системы, используя утилиты Линукса.

(warning) Подсказка: рекомендуется использовать утилиты uniq, awk, sort, head.

Мои подсказки:

Мое решение:

#!/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}'

Критерии оценки:

  1. Числа для суммирования могут быть отрицательными и вещественными.

  2. Пакет bc для дистрибутивов Linux не является пакетом по умолчанию. Либо предусмотрите момент, когда пакет не установлен, либо решите проблему при помощи других средств.

  • Калькулятор — 5 баллов

  • Сортировщик — 5 баллов

Рекомендуем сдать до: 09.02.2022

Tags

Нет комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.