11:54 hs... por pouco não cumpro o prometido.
Queria saber fazer as coisas mais simples. Sei que shell script dá pra condensar ao máximo a programação, e até que não estava grande, mas ai resolvi colocar comentários para que todos pudessem entender e cresceu muito. Além do que fui inventando consistências, e outras bobeiras o que ajudou no tamanho também.
Talvez alguém apareça até com algo bem menor, mas agora é o que eu pude fazer.
A rotina segue os seguintes passos:
- Pega o horário
- Consiste se esta digitado
- Consiste se a hora esta correta
- Consiste se os minutos estão corretos
- Formata o horário para XX:YY (Dois dígitos para hora e dois dígitos para minutos)
- Executa o comando
Eu não testei executando o comando final (comentei ele) porque não queria agendar nenhum desligamento, mas se o comando que o
sidney richards estiver passado esta correto acho que funcionará.
#!/bin/bash
#
# Rotina para agendar o desligamento de um PC
#
# Cristiano
# 18mai2007 10:01
#
# Rotina para consistir o horário informado
#
consisteHora() {
pHora=$horaDesl
#
# Separa Hora e Minuto
#
Hora=`echo $pHora | cut -f1 -d":"`
Minu=`echo $pHora | cut -f2 -d":"`
#
# Verifica se Hora e Minuto possuem valores numéricos ou literais
#
[ `expr $Hora + 1` ] || return 9999
[ `expr $Minu + 1` ] || return 9999
#
# Verifica se Hora e Minuto estão corretos
#
test $Hora -lt 0 -o $Hora -gt 23 && return 9999
test $Minu -lt 0 -o $Minu -gt 59 && return 9999
#
# Horário Correto
#
return 0
}
#
#Variável que guarda o horário do desligamento
#
horaDesl=$1 # Caso deseje passar o horário de desligamento direto pela linha de comando
[[ "$horaDesl" = [Hh] ]] && clear && zenity --info --title="Agenda Desligamento" --text="Sintaxe do comando\n\
para executar em modo interativo: agenda\n\
para executar direto: agenda HH:MM\n\
para ajuda: agenda h" && exit
while true; do
#
# Caso a data não tenha sido passada por parametro solicita a digitação da mesma
#
if test ! "$horaDesl"; then
horaDesl=`zenity --title="Agenda Desligamento" --text="Digite a hora em que deseja desligar (Formato: HH:MM - 24 Horas ou Digite fim para encerrar" --entry`
fi
#
# Consiste se nada foi digitado ou se foi solicitado o encerramento da rotina.
#
test "$horaDesl" = "" && zenity --info --title="Agenda Desligamento" --text="Nada foi digitado." && continue
[[ "$horaDesl" = [Ff][Ii][Mm] ]] && exit
#
# Consiste se o que foi digitado esta correto
#
consisteHora
#
# Se a rotina de consistência estiver perfeita retorna zero e quebra o laço, caso contrário avisa e solicita data novamente
#
if test $? -eq 0; then
break
else
zenity --info --title="Agenda Desligamento" --text="Hora digitada esta incorreta"
horaDesl=""
fi
done
###################################################################################
# Formata a hora para XX:YY (duas casas para hora e duas casas para minutos)
#
Hora=`echo $pHora | cut -f1 -d":"`
Tam=${#Hora}
Tam=`expr $Tam + 2`
Minu=`echo $pHora | cut -c$Tam-`
Hora=`printf "%02d" $Hora`
Minu=`printf "%02d" $Minu`
horaDesl="$Hora:$Minu"
###################################################################################
sudo shutdown -h $horaDesl
zenity --info --title="Agenda Desligamento" --text="Agendamento Concluido."
Copie a rotina, cole num arquivo (aqui chamei de
agenda) e depois mude as permissões dele (
chmod 755 arquivo).