#!/bin/bash
# 1. Вывод сообщения и комментарии
echo "===== Домашнее задание по Bash ====="
echo "Автор: Яроцкий А.П."
echo "Дата: $(date)"
echo ""
# 2. Несколько команд в одной строке
echo "Текущая директория:"; pwd; echo "Пользователь:"; whoami
echo ""
# 3. Переменные
echo "Домашняя директория: $HOME"
echo "Текущий пользователь: $USER"
my_name="Алексей"
my_age=18
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"
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"
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 "===== Скрипт успешно выполнил все задания ====="