Skip to content

Latest commit

 

History

History

04-script-01-bash

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

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

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

Есть скрипт:

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

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

Переменная Значение Обоснование
c a+b bash по умолчанию все воспринимает как строки, для него это строка, нет образения к переменным, нет $
d 1+2 Подставились значения переменных a и b, но арифметическая операция делается иначе, следовательно для него это тоже строка
e 3 Это синтаксис для арифметических операций, можно также заменить на $[$a+$b]

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

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

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

Подходов мб 4:

  • break внутри цикла
  • exit 0 внутри цикла
  • изменение условия в while, т.е. подставляем переменную, а из цикла на неё влияем
  • думаю есть возможность через сигнал остановить процесс :D

Продемонстрирую первый вариант, думаю он самый подходящий

Ваш скрипт:

#!/usr/bin/env bash

while ((1==1))
do
        curl http://localhost:81
        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

# В будущем легко вынести через передачу параметров
ips=("192.168.0.1" "173.194.222.113" "87.250.250.242")
port=80
attempts=5

for ip in ${ips[@]}
do
  echo $ip
  attempt=0
  while ((attempt < attempts))
  do
    curl -s $ip:$port >> log
    attempt=$[$attempt+1]
    echo $attempt
  done
done

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

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

Ваш скрипт:

#!/usr/bin/env bash

# В будущем легко вынести через передачу параметров
ips=("192.168.0.1" "173.194.222.113" "87.250.250.242")
port=80
attempts=5

while ((1==1))
do
  for ip in ${ips[@]}
  do
    echo $ip
    attempt=0
    while ((attempt < attempts))
    do
      curl -s --connect-timeout 2 $ip:$port
      if (($? != 0))
      then
        echo $ip >> error
        exit
      fi
      attempt=$[$attempt+1]
      echo $attempt
    done
  done
done

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

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

Ваш скрипт:

???