Compare commits
4 Commits
a27a69244f
...
f830ddb8e1
Author | SHA1 | Date | |
---|---|---|---|
f830ddb8e1 | |||
a881094492 | |||
e72bbca713 | |||
627cd7d499 |
46
bash/task1/log_analyzer.sh
Executable file
46
bash/task1/log_analyzer.sh
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Проверка наличия аргумента
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
echo "Ошибка: Необходимо указать путь к лог-файлу."
|
||||||
|
echo "Использование: $0 <путь к лог-файлу>"
|
||||||
|
echo "Этот скрипт анализирует лог-файл на наличие ошибок, предупреждений и информационных сообщений."
|
||||||
|
echo "$0 /var/log/syslog"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Путь к лог-файлу
|
||||||
|
log_file_path="$1"
|
||||||
|
|
||||||
|
# Проверка существования файла
|
||||||
|
if [ ! -f "$log_file_path" ]; then
|
||||||
|
echo "Ошибка: Файл '$log_file_path' не существует."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Переменные для хранения количества сообщений
|
||||||
|
error_count=0
|
||||||
|
warning_count=0
|
||||||
|
info_count=0
|
||||||
|
|
||||||
|
# Чтение лог-файла и подсчет сообщений
|
||||||
|
while IFS= read -r line
|
||||||
|
do
|
||||||
|
case "$line" in
|
||||||
|
*"ERROR"*)
|
||||||
|
((error_count++))
|
||||||
|
;;
|
||||||
|
*"WARNING"*)
|
||||||
|
((warning_count++))
|
||||||
|
;;
|
||||||
|
*"INFO"*)
|
||||||
|
((info_count++))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done < "$log_file_path"
|
||||||
|
|
||||||
|
# Вывод результатов
|
||||||
|
echo "Количество сообщений в лог-файле:"
|
||||||
|
echo "Ошибки: $error_count"
|
||||||
|
echo "Предупреждения: $warning_count"
|
||||||
|
echo "Информационные сообщения: $info_count"
|
40
bash/task2/backup.sh
Executable file
40
bash/task2/backup.sh
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Проверка аргументов
|
||||||
|
if [ "$#" -ne 2 ]; then
|
||||||
|
echo "Использование: $0 <путь_к_каталогу_для_резервной_копии> <путь_к_каталогу_для_сохранения>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Получаем аргументы
|
||||||
|
source_dir="$1"
|
||||||
|
backup_dir="$2"
|
||||||
|
|
||||||
|
# Проверяем, существует ли исходный каталог
|
||||||
|
if [ ! -d "$source_dir" ]; then
|
||||||
|
echo "Ошибка: Исходный каталог '$source_dir' не найден."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Создаем каталог для резервных копий, если он не существует
|
||||||
|
mkdir -p "$backup_dir"
|
||||||
|
|
||||||
|
# Получаем текущее время
|
||||||
|
timestamp=$(date +"%Y%m%d_%H%M%S")
|
||||||
|
|
||||||
|
# Создаем имя файла резервной копии
|
||||||
|
backup_file="backup_${timestamp}.tar.gz"
|
||||||
|
|
||||||
|
# Полный путь к архиву
|
||||||
|
backup_path="${backup_dir}/${backup_file}"
|
||||||
|
|
||||||
|
# Создание архива
|
||||||
|
tar -czf "$backup_path" -C "$source_dir" .
|
||||||
|
|
||||||
|
# Проверка успешности создания архива
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Резервная копия успешно создана: $backup_path"
|
||||||
|
else
|
||||||
|
echo "Ошибка: Не удалось создать резервную копию."
|
||||||
|
exit 1
|
||||||
|
fi
|
15
bash/task3/disk_monitoring.sh
Normal file
15
bash/task3/disk_monitoring.sh
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Указываем пороговое значение использования (например, 50%)
|
||||||
|
LIMIT=50
|
||||||
|
|
||||||
|
# Указываем почтовый адрес для уведомлений
|
||||||
|
EMAIL="walleri1@yandex.ru"
|
||||||
|
|
||||||
|
# Получаем текущее использование дискового пространства
|
||||||
|
USAGE=$(df -h / | awk 'NR==2 {gsub("%",""); print $5}')
|
||||||
|
|
||||||
|
# Проверяем, превышает ли использование пороговое значение
|
||||||
|
if [ "$USAGE" -gt "$LIMIT" ]; then
|
||||||
|
echo "Дисковое пространство переполнено: ${USAGE}% использовано." | mail -s "Предупреждение: Использование дискового пространства" "$EMAIL"
|
||||||
|
fi
|
1
bash/test_branch.sh
Normal file
1
bash/test_branch.sh
Normal file
@ -0,0 +1 @@
|
|||||||
|
#!/bin/bash
|
@ -1,23 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
time "time"
|
|
||||||
|
|
||||||
cycle "train_golang/pkg"
|
|
||||||
)
|
|
||||||
|
|
||||||
func add(a, b int) {
|
|
||||||
fmt.Println("Sum = ", a+b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sub(a, b int) {
|
|
||||||
fmt.Println("Sub = ", a-b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
go add(5, 6)
|
|
||||||
go sub(7, 9)
|
|
||||||
cycle.SimpleForCycle()
|
|
||||||
time.Sleep(1 * time.Second)
|
|
||||||
}
|
|
60
go/homework_one/cmd/main.go
Normal file
60
go/homework_one/cmd/main.go
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"homework_one/internal/input"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
for {
|
||||||
|
|
||||||
|
number_one, err := input.GetNumber("Введите первое число:")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(
|
||||||
|
"Некорректное число. Пожалуйста, введите числовое значение.",
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
operator := input.GetOperator()
|
||||||
|
|
||||||
|
number_two, err := input.GetNumber("Введите второе число:")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(
|
||||||
|
"Некорректное число. Пожалуйста, введите числовое значение.",
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var result float64
|
||||||
|
switch operator {
|
||||||
|
case "+":
|
||||||
|
result = number_one + number_two
|
||||||
|
case "-":
|
||||||
|
result = number_one - number_two
|
||||||
|
case "*":
|
||||||
|
result = number_one * number_two
|
||||||
|
case "/":
|
||||||
|
if number_two == 0 {
|
||||||
|
fmt.Println("Ошибка: деление на ноль невозможно")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
result = number_one / number_two
|
||||||
|
default:
|
||||||
|
fmt.Println("Неизвестный оператор")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fmt.Printf(
|
||||||
|
"Результат: %F %s %F = %F\n",
|
||||||
|
number_one,
|
||||||
|
operator,
|
||||||
|
number_two,
|
||||||
|
result,
|
||||||
|
)
|
||||||
|
|
||||||
|
fmt.Println("Press the Enter Key to stop anytime")
|
||||||
|
fmt.Scanln()
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
10
go/homework_one/go.mod
Normal file
10
go/homework_one/go.mod
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
module homework_one
|
||||||
|
|
||||||
|
go 1.23.6
|
||||||
|
|
||||||
|
require github.com/manifoldco/promptui v0.9.0
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b // indirect
|
||||||
|
)
|
52
go/homework_one/internal/input/input.go
Normal file
52
go/homework_one/internal/input/input.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package input
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
p "github.com/manifoldco/promptui"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetNumber получение числового ввода пользователя
|
||||||
|
func GetNumber(message string) (float64, error) {
|
||||||
|
validate := func(input string) error {
|
||||||
|
_, err := strconv.ParseFloat(input, 64)
|
||||||
|
if err != nil {
|
||||||
|
return errors.New(
|
||||||
|
"Некорректное число. Пожалуйста, введите числовое значение.",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt := p.Prompt{
|
||||||
|
Label: message,
|
||||||
|
Validate: validate,
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := prompt.Run()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Prompt failed %v\n", err)
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
number, _ := strconv.ParseFloat(result, 64)
|
||||||
|
return number, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOperator получение оператора
|
||||||
|
func GetOperator() string {
|
||||||
|
prompt := p.Select{
|
||||||
|
Label: "Выберите операцию (+, -, *, /):",
|
||||||
|
Items: []string{"+", "-", "*", "/"},
|
||||||
|
}
|
||||||
|
|
||||||
|
_, result, err := prompt.Run()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Prompt failed %v\n", err)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
@ -1,11 +0,0 @@
|
|||||||
package cycle
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
func SimpleForCycle() {
|
|
||||||
for i := 0; i < 100; i++ {
|
|
||||||
fmt.Println("Iter: ", i)
|
|
||||||
}
|
|
||||||
}
|
|
25
go/summ/summ.go
Normal file
25
go/summ/summ.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
summ := 0
|
||||||
|
|
||||||
|
// Проходим по всем аргументам командной строки, начиная с первого
|
||||||
|
for i := 1; i < len(os.Args); i++ {
|
||||||
|
// Преобразуем аргумент в целое число
|
||||||
|
num, err := strconv.Atoi(os.Args[i])
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Ошибка преобразования аргумента '%s': %v\n", os.Args[i], err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
summ += num
|
||||||
|
}
|
||||||
|
|
||||||
|
// Выводим результат
|
||||||
|
fmt.Println(summ)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user