Загрузка данных


#!/bin/bash

# ============================================
# Домашнее задание по Bash-скриптам
# Демонстрация всех требуемых конструкций
# ============================================

# 1. Вывод сообщения и комментарии
echo "===== Домашнее задание по Bash ====="
echo "Автор: Студент"
echo "Дата: $(date)"
echo ""

# 2. Несколько команд в одной строке (через ;)
echo "Текущая директория:"; pwd; echo "Пользователь:"; whoami
echo ""

# 3. Переменные
#   - Переменная среды (HOME, USER)
echo "Домашняя директория (переменная среды): $HOME"
echo "Текущий пользователь (переменная среды): $USER"

#   - Пользовательские переменные
my_name="Иван"
my_age=25
echo "Пользовательская переменная: my_name = $my_name"
echo "Пользовательская переменная: my_age = $my_age"
echo ""

# 4. Подстановка команд (два способа)
#   Способ 1: обратные апострофы ` `
current_dir=`pwd`
echo "Текущая директория через \` \`: $current_dir"

#   Способ 2: $()
current_time=$(date +"%H:%M:%S")
echo "Текущее время через \$(): $current_time"
echo ""

# 5. Математические операции
a=10
b=3
sum=$((a + b))
diff=$((a - b))
prod=$((a * b))
div=$((a / b))
mod=$((a % b))
echo "Математика: $a + $b = $sum"
echo "$a - $b = $diff"
echo "$a * $b = $prod"
echo "$a / $b = $div"
echo "$a % $b = $mod"
echo ""

# 6. Управляющая конструкция if-then-else
#    Сравнение чисел
number=7
echo "Сравнение чисел: number = $number"
if [ $number -gt 5 ]; then
    echo "  -> Число $number больше 5"
else
    echo "  -> Число $number меньше или равно 5"
fi

#    Сравнение строк
str1="hello"
str2="world"
echo "Сравнение строк: '$str1' и '$str2'"
if [ "$str1" = "$str2" ]; then
    echo "  -> Строки равны"
else
    echo "  -> Строки не равны"
fi

# Дополнительное сравнение строк с < и > (нужно использовать [[ ]] или экранирование)
if [[ "$str1" < "$str2" ]]; then
    echo "  -> '$str1' меньше '$str2' (лексикографически)"
elif [[ "$str1" > "$str2" ]]; then
    echo "  -> '$str1' больше '$str2'"
else
    echo "  -> Строки равны"
fi
echo ""

# 7. Проверки файлов
test_file="./testfile.txt"
test_dir="./testdir"

# Создаём тестовые объекты для проверки (чтобы было что проверять)
touch "$test_file"
mkdir -p "$test_dir"
chmod +x "$test_file"  # сделаем исполняемым для проверки -x

echo "Проверки файлов:"
# -e существует ли файл
if [ -e "$test_file" ]; then
    echo "  - Файл $test_file существует"
else
    echo "  - Файл $test_file не существует"
fi

# -f является ли обычным файлом
if [ -f "$test_file" ]; then
    echo "  - $test_file является обычным файлом"
fi

# -d является ли директорией
if [ -d "$test_dir" ]; then
    echo "  - $test_dir является директорией"
fi

# -r доступен для чтения
if [ -r "$test_file" ]; then
    echo "  - $test_file доступен для чтения"
fi

# -w доступен для записи
if [ -w "$test_file" ]; then
    echo "  - $test_file доступен для записи"
fi

# -x является исполняемым
if [ -x "$test_file" ]; then
    echo "  - $test_file является исполняемым"
fi

# -s не пустой
echo "Привет" > "$test_file"   # записываем что-то, чтобы не был пустым
if [ -s "$test_file" ]; then
    echo "  - $test_file не пустой"
fi

# Сравнение новизны (nt, ot)
other_file="./other.txt"
touch "$other_file"
sleep 1   # небольшая задержка, чтобы изменилось время
touch "$test_file"  # обновим время test_file
if [ "$test_file" -nt "$other_file" ]; then
    echo "  - $test_file новее, чем $other_file"
fi

# -O владелец текущий пользователь
if [ -O "$test_file" ]; then
    echo "  - Вы владелец $test_file"
fi

# -G группа совпадает
if [ -G "$test_file" ]; then
    echo "  - Группа файла совпадает с вашей группой"
fi

# Удаляем тестовые файлы (чистота)
rm -f "$test_file" "$other_file"
rmdir "$test_dir" 2>/dev/null
echo ""

# 8. Итоговое сообщение
echo "===== Скрипт успешно выполнил все задания ====="