Собственно сам скрипт (исполняемый файл):
#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59 = в 23 часа 59 минут.\n+15 = через 15 минут.\n+155 = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
shutdown $(cat /tmp/down.txt) &
else
zenity --width=150 --height=50 --info --timeout=5 --title="Уведомление" --text="Не указано время\nвыключения.\nЗадание не назначено."
fi
exit
Пробелы перед знаком = подбирались так, чтобы этот знак на каждой последующей строке находился примерно под таким же знаком в предыдущей.
--width= и --height= определяют ширину и высоту форм.
--timeout=5 указывает на интервал в 5 секунд, после которого форма уведомления автоматически будет закрыта. Если это не востребовано, то используйте:
#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59 = в 23 часа 59 минут.\n+15 = через 15 минут.\n+155 = через 2 часа 35 минут." --entry > /tmp/down.txt
if [ -s /tmp/down.txt ]; then
shutdown $(cat /tmp/down.txt) &
else
:
fi
exit
или так:
#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59 = в 23 часа 59 минут.\n+15 = через 15 минут.\n+155 = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
shutdown $(cat /tmp/down.txt) &
fi
exit
Вы можете подобрать свои значения, если указанные в примере скрипта вас не устраивают.
✅ Добавление подтверждающих сообщений
Результат ввода значений можно отобразить информационным сообщением. Примеры:
Чтобы отображалось нужное сообщение, поскольку ввод может быть как в формате ЧЧ:ММ (часов минут), так и в формате +М (минут), то в скрипт вводится проверка введённого значения на наличие символа двоеточия (или +, но тогда следует поменять местами порядок выполнения по условию).
var=`cat /tmp/down.txt`
if [[ $var =~ ":" ]]; then
zenity --width=150 --height=50 --info --timeout=7 --title="Подтверждение" --text="Компьютер будет\nвыключен в $(cat /tmp/down.txt)"
else
zenity --width=150 --height=50 --info --timeout=7 --title="Подтверждение" --text="Компьютер будет\nвыключен\n через $(cut -c2- <<< $(cat /tmp/down.txt)) мин."
fi
Если в считанном значении будет найден символ двоеточия, то результатом будет вывод сообщения о выключении ЧЧ:ММ. В ином случае будет выводиться сообщение о выключении через М минут. При выводе второго сообщения не отображается символ +, что обеспечивается инструкцией $(cut -c2- <<< $(cat /tmp/down.txt)). --timeout=7 указывает, что после 7 секунд выводимое сообщение автоматически исчезнет. Таким образом, листинг скрипта с информационными сообщениями имеет вид:
#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59 = в 23 часа 59 минут.\n+15 = через 15 минут.\n+155 = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
shutdown $(cat /tmp/down.txt) &
var=`cat /tmp/down.txt`
if [[ $var =~ ":" ]]; then
zenity --width=150 --height=50 --info --timeout=7 --title="Уведомление" --text="Компьютер будет\nвыключен в $(cat /tmp/down.txt)"
else
zenity --width=150 --height=50 --info --timeout=7 --title="Уведомление" --text="Компьютер будет\nвыключен\n через $(cut -c2- <<< $(cat /tmp/down.txt)) мин."
fi
else
zenity --width=150 --height=50 --info --timeout=5 --title="Уведомление" --text="Не указано время\nвыключения.\nЗадание не назначено."
fi
exit
✅ Чтобы сделать кнопку вызова созданного скрипта в главном меню создайте файл .desktop, например, Shutdown-at.dеsktop, который должен располагаться в скрытой папке вашего домашнего каталога (папки) ~/.local/share/applications и впишите в него:
[Desktop Entry]
Name=Shutdown-at
Exec=полный путь к файлу sh
Comment=Назначить время выключения
Terminal=false
PrefersNonDefaultGPU=false
Icon=укажите значок для кнопки, например, application-exit или system-shutdown
Type=Application
Categories=GTK;Development;
Если нужно, чтобы кнопка отображалась по-русски, то добавьте строку Name[ru]= , в которой укажите свой текст.
Строка Categries= не является обязательной. В данном случае она будет указывать на то, что кнопка будет отображаться в меню "Программирование" (Cinnamon) или "Разработка" (xfce).
Демонстрационный ролик (ниже или на Google Drive):