Skip to content

Latest commit

 

History

History
116 lines (110 loc) · 4.6 KB

04-script-01-bash.md

File metadata and controls

116 lines (110 loc) · 4.6 KB

Домашнее задание к занятию "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, т.к. a и b без символа $, + воспринимается как оператор только в арифметических операциях;
% echo $c
a+b
  • d=$a+$b вернет 1+2, т.к. a и b с символом $ будут восприниматься как обращения к переменным
% echo $d
1+2
  • e=$(($a+$b)) вернет 3, т.к. конструкция ((..)) служит для арифметических операций
% echo $e
3

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

	while ((1==1)
	do
	curl https://localhost:4757
	if (($? != 0))
	then
	date >> curl.log
	fi
	done
	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. Проверять доступность необходимо пять раз для каждого узла.

#!/usr/bin/env bash
declare -i test=1
while (($test<=5))
do
  for host in 192.168.0.1 173.194.222.113 87.250.250.242; do
    nc -zw1 $host 80
    echo $? $host `date` >> nc_test.log
  done
test+=1
sleep 1
done

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

#!/usr/bin/env bash
declare -i test=1
while (($test==1))
do
  for host in 192.168.0.1 173.194.222.113 87.250.250.242; do
    nc -zw1 $host 80
    if (($?!=0))
    then
      echo $? $host `date` >> error.log
      exit 0
    else
      echo $? $host `date` >> nc_test.log
    fi
  done
sleep 1
done

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

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

% nano .git/hooks/commit-msg
#!/usr/bin/env bash 

validator=$(grep -c "\[[[:digit:]]*-[[:alpha:]]*-[[:digit:]]*-[[:alpha:]]*\] *" "$1")
count=$(cat "$1" | wc -m )

if [[ "$validator" -eq "0" ]]; then 
    echo "Commit message does not match format: [number-section-number-lecture] message"
    echo 
    echo "Commit message:"
    cat $1 | grep -v ^#
    echo
    exit 1
elif [[ "$count" -gt "30" ]]; then 
    echo "The commit message must not exceed 30 characters. It turned out $count characters"
    echo 
    echo :"Commit message:"
    cat $1 | grep -v ^#
    echo
    exit 1
fi
exit 0
% chmod +x .git/hooks/commit-msg