add notes 04-yaml, move homework 4.1 to subdirectory

This commit is contained in:
2022-04-12 10:33:57 +07:00
parent 744437c4d6
commit 10cd187006
11 changed files with 40 additions and 5 deletions

2
src/homework/04-script/4.1/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/curl.log
/error.log

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1 @@
[04-script-01-bash] сломал хук слишком длинный комментарий

View File

@@ -0,0 +1 @@
сломал хук

View File

@@ -0,0 +1 @@
[04-script-01-bash] сломал хук

View File

@@ -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

View File

@@ -0,0 +1,160 @@
Выполнение [домашнего задания](https://github.com/netology-code/sysadm-homeworks/blob/devsys10/04-script-01-bash/README.md)
по теме "4.1. Командная оболочка Bash: Практические навыки".
## Q/A
## Обязательная задача 1
Есть [скрипт](q1_script.sh):
```shell
a=1
b=2
c=a+b
d=$a+$b
e=$(($a+$b))
```
Какие значения переменным `c`,`d`,`e` будут присвоены? Почему?
| Переменная | Значение | Обоснование |
|------------|----------|--------------------------------------------------------------------------------------------------------------------------|
| `c` | "a+b" | Присвоение обычной строки "a+b" без каких-либо преобразований, так как нет никаких спец-символов. |
| `d` | "1+2" | Конкатенация значений переменных `a` и `b` с символом "+", так как не заданы условия для произведения операции сложения. |
| `e` | "3" | Сложение значений переменных `a` и `b` используя арифметику целых чисел. |
## Обязательная задача 2
На нашем локальном сервере упал сервис и мы написали скрипт, который постоянно проверяет его доступность, записывая дату проверок до тех пор, пока сервис не станет доступным (после чего скрипт должен завершиться). В скрипте допущена ошибка, из-за которой выполнение не может завершиться, при этом место на Жёстком Диске постоянно уменьшается. Что необходимо сделать, чтобы его исправить:
```shell
while ((1==1)
do
curl https://localhost:4757
if (($? != 0))
then
date >> curl.log
fi
done
```
### Ваш скрипт:
[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`. Проверять доступность необходимо пять раз для каждого узла.
### Ваш скрипт:
[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, скрипт прерывается.
### Ваш скрипт:
[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\] сломал хук.
### Ваш скрипт:
[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
```

View File

@@ -40,4 +40,39 @@ arrayInt+=(12 123 13)
echo $IFS
export IFS=;
unset IFS
```
## YAML
* Типы данных
```yaml
root:
emptyValue:
booleanTrue: true
booleanFalse: false
canonTime: 2020-12-15T00:30:44.1Z
date: 2020-12-15
list:
- one
- two
- three
- name: one
type: two
default: true
using: [ localhost, 7.7.7.7 ]
```
* Многострочные значения в ключе
```yaml
---
root:
first:|
Этот вид
сохранит все переходы на новую строку
second:>
А этот
преобразует каждый переход на новую строку
в пробел
```