Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

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

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

Есть скрипт:

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

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

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

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

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

while ((1==1)
do
	curl https://localhost:4757
	if (($? != 0))
	then
		date >> curl.log
	fi
done

Скрипт исправлен до следуюшего вида:

#!/usr/bin/env bash

while ((1 == 1))
do
        curl https://ngs.ru
        if (($? == 0))
        then
                echo $(date)  >> curl.log
                break
        fi
done

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

Ваш скрипт:

#!/usr/bin/env bash

IP=(192.168.0.1 173.194.222.113 87.250.250.242)
for (( i = 1; i <= 5; i++ ))
do
        for item in ${IP[*]}
        do
                curl --connect-timeout 5 $item:80 2>/dev/null 1>/dev/null
                if (($? == 0))
                then
                        echo $(date)"  $item:80 is UP"  >> curl.log
                else
                        echo $(date)"  $item:80 is DOWN"  >> curl.log
                fi
        done
        sleep 60
done

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

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

Ваш скрипт:

#!/usr/bin/env bash

IP=(173.194.222.113 87.250.250.242)
while ((1 == 1))
do
        for item in ${IP[*]}
        do
                curl --connect-timeout 5 $item:80 2>/dev/null 1>/dev/null
                if (($? == 0))
                then
                        echo $(date)"  $item:80 is UP"  >> curl.log
                else
                        echo $(date)"  $item:80 is DOWN"  >> error.log
                        exit 0
                fi
        done
        sleep 5
done

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

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

Ваш скрипт:

#!/usr/bin/env bash

#msg=`cat $1`
#msg=$(cat $1)
msg=$(< $1)
#length=$(echo $msg | wc -m)
length=${#msg}

regexp="^\[[0-9]{1,3}-[A-Za-z0-9_]{1,25}-[0-9]{1,3}-[A-Za-z0-9_]{1,25}]\s"
if (( $length > 30 ))
then
        echo "ERROR Message is too long"
        exit 1
fi
echo $msg | grep -q -E $regexp
if (($? != 0))
then
        echo "ERROR Message format mismatch"
        exit 1
fi

Скрипт необходимо прописать в следующем файле: $ vim .git/hooks/commit-msg