anber137 / devops-netology

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Домашнее задание к занятию "4.1. Командная оболочка Bash: Практические навыки"

Обязательная задача 1

Есть скрипт:

a=1
b=2
c=a+b
d=$a+$b
e=$(($a+$b))

Какие значения переменным c,d,e будут присвоены? Почему?

Переменная Значение Обоснование
c a+b Обращение к переменным a, b не происходит. В данном случае в c записывается только последовательность символов.
d 1+2 Тип переменных явно не определен. Происходит обращение к переменным, но не попытка перевода в целочисленные значения с последующим вычислением суммы.
e 3 Происходит вычисление суммы значений переменных и соответственно попытка преобразования к целочисленным значениям.

Обязательная задача 2

На нашем локальном сервере упал сервис и мы написали скрипт, который постоянно проверяет его доступность, записывая дату проверок до тех пор, пока сервис не станет доступным. В скрипте допущена ошибка, из-за которой выполнение не может завершиться, при этом место на Жёстком Диске постоянно уменьшается. Что необходимо сделать, чтобы его исправить:

# Максимальный размер файла curl.log при привышении которого файл перезаписывается
maxsizefile=100000
while ((1==1))
do
        curl https://localhost:4757  > /dev/null 2>&1
        if (($? != 0))
        then
                if [ $(wc -c < curl.log) -gt $maxsizefile ]
                then
                        echo "file was rewrite" > curl.log
                fi
                date >> curl.log

        else
                echo "service is up" $(date) >> curl.log
                # если команда curl выполнена с кодом 0, то выходим из цикла, сервис доступен
                break
        fi
done

Необходимо написать скрипт, который проверяет доступность трёх IP: 192.168.0.1, 173.194.222.113, 87.250.250.242 по 80 порту и записывает результат в файл log. Проверять доступность необходимо пять раз для каждого узла.

Ваш скрипт:

echo -n > log
array_ip=(192.168.0.1 173.194.222.113 87.250.250.242)
for ip in "${array_ip[@]}"
do
        for ((i=1;i<=5;i++))
        do
                nc -z $ip 80
                if (($? != 0))
                then
                        echo $ip "unavailable" >> log
                else
                        echo $ip "available" >> log
                fi
        done
done

Обязательная задача 3

Необходимо дописать скрипт из предыдущего задания так, чтобы он выполнялся до тех пор, пока один из узлов не окажется недоступным. Если любой из узлов недоступен - IP этого узла пишется в файл error, скрипт прерывается.

Ваш скрипт:

# Если правильно понял, то писать в log нет необходимости, требуется записать в error и прервать выпонение скрипта.
array_ip=(192.168.0.1 173.194.222.113 87.250.250.242)
while ((1==1))
do
        for ip in "${array_ip[@]}"
        do
                nc -z $ip 80
                if (($? != 0))
                then
                        echo $ip > error
                        exit 0
                fi
        done
done

Дополнительное задание (со звездочкой*) - необязательно к выполнению

Мы хотим, чтобы у нас были красивые сообщения для коммитов в репозиторий. Для этого нужно написать локальный хук для git, который будет проверять, что сообщение в коммите содержит код текущего задания в квадратных скобках и количество символов в сообщении не превышает 30. Пример сообщения: [04-script-01-bash] сломал хук.

Ваш скрипт:

#!/usr/bin/env bash
regexp1="^\[[0-9]+-.*-[0-9]+.*\].*$"
regexp2="^.{10,29}$"
v=$(cat $1)
if [[ "$v" =~ $regexp1 ]] && [[ "$v" =~ $regexp2 ]]
then
        exit 0
else
        echo >&2 Message does not match pattern
        exit 1
fi

About