Cкрипт для выключения Mac в заданное время

Этот скрипт позволяет указать время выключения компьютера в формате ЧЧ:MM. Вот как им пользоваться:

  1. Сохраните скрипт в файл, например shutdown_timer.sh
  2. Сделайте его исполняемым командой: chmod +x shutdown_timer.sh
  3. Запустите скрипт с указанием времени: ./shutdown_timer.sh 23:30

Как работает скрипт:

  • Принимает время в формате ЧЧ:MM
  • Проверяет, что формат времени корректный
  • Вычисляет, сколько минут осталось до указанного времени
  • Использует стандартную команду shutdown для планирования выключения
  • Если указанное время уже прошло сегодня, планирует выключение на завтра

Для отмены запланированного выключения используйте команду sudo shutdown -c.

#!/bin/bash

# Функция для проверки, что время введено в правильном формате (HH:MM)
validate_time() {
    if [[ ! $1 =~ ^([0-1][0-9]|2[0-3]):[0-5][0-9]$ ]]; then
        echo "Ошибка: введите время в формате ЧЧ:МM (например, 23:30)"
        exit 1
    fi
}

# Проверяем, указано ли время в аргументах
if [ $# -eq 0 ]; then
    echo "Пожалуйста, укажите время выключения в формате ЧЧ:MM"
    echo "Пример: $0 23:30"
    exit 1
fi

# Проверяем формат времени
validate_time "$1"

# Текущее время
current_time=$(date +%s)

# Преобразуем введенное время в секунды с начала дня
shutdown_hour=$(echo $1 | cut -d':' -f1)
shutdown_min=$(echo $1 | cut -d':' -f2)

# Вычисляем время выключения в секундах
target_time=$(date -j -f "%H:%M" "$shutdown_hour:$shutdown_min" +%s 2>/dev/null)

# Проверка на случай ошибки конвертации времени
if [ $? -ne 0 ]; then
    echo "Ошибка при обработке введенного времени."
    exit 1
fi

# Если целевое время уже прошло сегодня, переносим на завтра
if [ $target_time -le $current_time ]; then
    target_time=$((target_time + 86400)) # Добавляем 24 часа (в секундах)
fi

# Вычисляем разницу в секундах
seconds_diff=$((target_time - current_time))

# Выводим информацию
echo "Компьютер будет выключен в $1"
echo "До выключения осталось: $(($seconds_diff / 60)) минут"

# Устанавливаем команду выключения
sudo shutdown -h +$(($seconds_diff / 60))

# Выводим сообщение о том, как отменить выключение
echo "Чтобы отменить запланированное выключение, выполните команду:"
echo "sudo killall shutdown или sudo shutdown -c"

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *