From e03f31515efd1e5b52137f71cddcbc19d2c644fb Mon Sep 17 00:00:00 2001 From: dannc Date: Mon, 4 Apr 2022 12:14:09 +0700 Subject: [PATCH] homework 4.1: add all questions --- src/homework/4.1/.gitignore | 2 + src/homework/4.1/q1_script.sh | 9 ++ src/homework/4.1/q2_script.sh | 13 ++ src/homework/4.1/q3_script.sh | 14 +++ src/homework/4.1/q4_script.sh | 27 +++++ src/homework/4.1/q5_example_bad_lenght.txt | 1 + src/homework/4.1/q5_example_bad_pattern.txt | 1 + src/homework/4.1/q5_example_good.txt | 1 + src/homework/4.1/q5_script.sh | 19 +++ src/homework/4.1/readme.md | 127 +++++++++++++++++--- 10 files changed, 197 insertions(+), 17 deletions(-) create mode 100644 src/homework/4.1/.gitignore create mode 100755 src/homework/4.1/q1_script.sh create mode 100755 src/homework/4.1/q2_script.sh create mode 100755 src/homework/4.1/q3_script.sh create mode 100755 src/homework/4.1/q4_script.sh create mode 100644 src/homework/4.1/q5_example_bad_lenght.txt create mode 100644 src/homework/4.1/q5_example_bad_pattern.txt create mode 100644 src/homework/4.1/q5_example_good.txt create mode 100755 src/homework/4.1/q5_script.sh diff --git a/src/homework/4.1/.gitignore b/src/homework/4.1/.gitignore new file mode 100644 index 0000000..e56f272 --- /dev/null +++ b/src/homework/4.1/.gitignore @@ -0,0 +1,2 @@ +/curl.log +/error.log \ No newline at end of file diff --git a/src/homework/4.1/q1_script.sh b/src/homework/4.1/q1_script.sh new file mode 100755 index 0000000..34e25cb --- /dev/null +++ b/src/homework/4.1/q1_script.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +a=1 +b=2 +c=a+b +d=$a+$b +e=$(($a+$b)) + +echo a=$a b=$b c=$c d=$d e=$e \ No newline at end of file diff --git a/src/homework/4.1/q2_script.sh b/src/homework/4.1/q2_script.sh new file mode 100755 index 0000000..cd985e7 --- /dev/null +++ b/src/homework/4.1/q2_script.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +while ((1==1)) +do + curl https://localhost:4757 + + if (($? != 0)) + then + date >> curl.log; + else + break; + fi +done diff --git a/src/homework/4.1/q3_script.sh b/src/homework/4.1/q3_script.sh new file mode 100755 index 0000000..40672dc --- /dev/null +++ b/src/homework/4.1/q3_script.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +serverPort=80 +servers=("192.168.0.1" "173.194.222.113" "87.250.250.242") + +for i in {1..5} +do + for server in ${servers[@]} + do + curl --connect-timeout 3 --max-time 5 http://${server}:${serverPort} + curlResult=$? + echo "$(date) curl result for ${server} is ${curlResult}" >> curl.log; + done +done diff --git a/src/homework/4.1/q4_script.sh b/src/homework/4.1/q4_script.sh new file mode 100755 index 0000000..6036cf9 --- /dev/null +++ b/src/homework/4.1/q4_script.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +serverPort=80 +servers=("192.168.0.1" "173.194.222.113" "87.250.250.242") + +for i in {1..5} +do + isError=0 + for server in ${servers[@]} + do + curl --connect-timeout 3 --max-time 5 http://${server}:${serverPort} + curlResult=$? + echo "$(date) curl result for ${server} is ${curlResult}" >> curl.log; + if (($curlResult!=0)) + then + echo ${server} > error.log + isError=1 + break + fi + done + + if (($isError!=0)) + then + echo "going to break" + break + fi +done diff --git a/src/homework/4.1/q5_example_bad_lenght.txt b/src/homework/4.1/q5_example_bad_lenght.txt new file mode 100644 index 0000000..64b60bf --- /dev/null +++ b/src/homework/4.1/q5_example_bad_lenght.txt @@ -0,0 +1 @@ +[04-script-01-bash] сломал хук слишком длинный комментарий \ No newline at end of file diff --git a/src/homework/4.1/q5_example_bad_pattern.txt b/src/homework/4.1/q5_example_bad_pattern.txt new file mode 100644 index 0000000..57c2694 --- /dev/null +++ b/src/homework/4.1/q5_example_bad_pattern.txt @@ -0,0 +1 @@ +сломал хук \ No newline at end of file diff --git a/src/homework/4.1/q5_example_good.txt b/src/homework/4.1/q5_example_good.txt new file mode 100644 index 0000000..7447dc8 --- /dev/null +++ b/src/homework/4.1/q5_example_good.txt @@ -0,0 +1 @@ +[04-script-01-bash] сломал хук \ No newline at end of file diff --git a/src/homework/4.1/q5_script.sh b/src/homework/4.1/q5_script.sh new file mode 100755 index 0000000..3aa1d70 --- /dev/null +++ b/src/homework/4.1/q5_script.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +MSG="$1" + +if ! grep -qE "^\[.+\]\s.+\n{0,1}$" "$MSG" +then + cat "$MSG" + echo $'\nYour commit message must match the pattern' + exit 1 +fi + +msgStr=$(cat $MSG) +msgLen=${#msgStr} +if ((msgLen>50)) +then + cat "$MSG" + echo $'\nYour commit message is too long' + exit 1 +fi \ No newline at end of file diff --git a/src/homework/4.1/readme.md b/src/homework/4.1/readme.md index 1b600f6..54fbc24 100644 --- a/src/homework/4.1/readme.md +++ b/src/homework/4.1/readme.md @@ -5,8 +5,8 @@ ## Обязательная задача 1 -Есть скрипт: -```bash +Есть [скрипт](./q1_script.sh): +```shell a=1 b=2 c=a+b @@ -16,16 +16,16 @@ e=$(($a+$b)) Какие значения переменным c,d,e будут присвоены? Почему? -| Переменная | Значение | Обоснование | -| ------------- | ------------- | ------------- | -| `c` | ??? | ??? | -| `d` | ??? | ??? | -| `e` | ??? | ??? | +| Переменная | Значение | Обоснование | +|------------|----------|----------------------------------------------------------------------------------------------------------------------| +| `c` | "a+b" | Присвоение обычной строки "a+b". | +| `d` | "1+2" | Конкатенация значений переменных a и b с символом "+", так как не заданы условия для произведения операции сложения. | +| `e` | "3" | Сложение переменных a и b используя арифметику целых чисел. | ## Обязательная задача 2 На нашем локальном сервере упал сервис и мы написали скрипт, который постоянно проверяет его доступность, записывая дату проверок до тех пор, пока сервис не станет доступным (после чего скрипт должен завершиться). В скрипте допущена ошибка, из-за которой выполнение не может завершиться, при этом место на Жёстком Диске постоянно уменьшается. Что необходимо сделать, чтобы его исправить: -```bash +```shell while ((1==1) do curl https://localhost:4757 @@ -37,31 +37,124 @@ done ``` ### Ваш скрипт: -```bash -??? + +[script](./q2_script.sh) + +```shell +#!/usr/bin/env bash + +while ((1==1)) +do + curl https://localhost:4757 + + if (($? != 0)) + then + date >> curl.log; + else + break; + fi +done ``` ## Обязательная задача 3 Необходимо написать скрипт, который проверяет доступность трёх IP: `192.168.0.1`, `173.194.222.113`, `87.250.250.242` по `80` порту и записывает результат в файл `log`. Проверять доступность необходимо пять раз для каждого узла. ### Ваш скрипт: -```bash -??? + +[script](./q3_script.sh) +```shell +#!/usr/bin/env bash + +serverPort=80 +servers=("192.168.0.1" "173.194.222.113" "87.250.250.242") + +for i in {1..5} +do + for server in ${servers[@]} + do + curl --connect-timeout 3 --max-time 5 http://${server}:${serverPort} + curlResult=$? + echo "$(date) curl result for ${server} is ${curlResult}" >> curl.log; + done +done ``` ## Обязательная задача 4 Необходимо дописать скрипт из предыдущего задания так, чтобы он выполнялся до тех пор, пока один из узлов не окажется недоступным. Если любой из узлов недоступен - IP этого узла пишется в файл error, скрипт прерывается. ### Ваш скрипт: -```bash -??? + +[script](./q4_script.sh) + +```shell +#!/usr/bin/env bash + +serverPort=80 +servers=("192.168.0.1" "173.194.222.113" "87.250.250.242") + +for i in {1..5} +do + isError=0 + for server in ${servers[@]} + do + curl --connect-timeout 3 --max-time 5 http://${server}:${serverPort} + curlResult=$? + echo "$(date) curl result for ${server} is ${curlResult}" >> curl.log; + if (($curlResult!=0)) + then + echo ${server} > error.log + isError=1 + break + fi + done + + if (($isError!=0)) + then + echo "going to break" + break + fi +done ``` ## Дополнительное задание (со звездочкой*) - необязательно к выполнению -Мы хотим, чтобы у нас были красивые сообщения для коммитов в репозиторий. Для этого нужно написать локальный хук для git, который будет проверять, что сообщение в коммите содержит код текущего задания в квадратных скобках и количество символов в сообщении не превышает 30. Пример сообщения: \[04-script-01-bash\] сломал хук. +Мы хотим, чтобы у нас были красивые сообщения для коммитов в репозиторий. Для этого нужно написать локальный хук для git, который будет проверять, +что сообщение в коммите содержит код текущего задания в квадратных скобках и количество символов в сообщении не превышает 30. +Пример сообщения: \[04-script-01-bash\] сломал хук. ### Ваш скрипт: -```bash -??? + +[script](./q5_script.sh) + +```shell +#!/usr/bin/env bash + +MSG="$1" + +if ! grep -qE "^\[.+\]\s.+\n{0,1}$" "$MSG" +then + cat "$MSG" + echo $'\nYour commit message must match the pattern' + exit 1 +fi + +msgStr=$(cat $MSG) +msgLen=${#msgStr} +if ((msgLen>50)) +then + cat "$MSG" + echo $'\nYour commit message is too long' + exit 1 +fi +``` + +Протестировал запуск скрипта следующими способами: + +```shell +# несоответствие паттерну +./q5_script.sh q5_example_bad_pattern.txt +# несоответствие длины +./q5_script.sh q5_example_bad_lenght.txt +# корректное сообщение +./q5_script.sh q5_example_good.txt ``` \ No newline at end of file