ajuda com controlador de tempo no shell script

Iniciado por cavera37, 13 de Abril de 2007, 19:19

tópico anterior - próximo tópico

cavera37

oii gente
a um tempo atras so pra  treina eu tava querendo faze um shell script q te pede uma senha se a senha ta certa  nada acontece mas se estiver errada o pc desliga ateh  ai tudo bem mas  eu queria  bota um "controlador de tempo" em q se a senha nao  fosse digita em 5 minutos  o pc desliga  automatico mas eu nao consigui alguem tem alguma ideia?

ai vai o codigo ( q nao ta bem completo ainda)

#!/bin/bash


senha=$(zenity --entry --text="entre com a sua senha" title="entre com a sua senha" --hide-text)

if [ "$senha" = "e2g7w5f7" ]; then
   zenity --info --text="a senha esta certa" --title="confirmação"
else
   zenity --info --text="a senha esta errada e o computador vai ser desligado" --title="erro"
command shutdown now
fi



agradeço desde jah
t++

clcampos

Numa busca rápida não encontrei uma opção do zenity que feche o comando após um tempo.

Aproveitando vou fazer duas perguntas:

1) Existe algum comando que você informe o nome do usuário e a senha e ele informe se ela esta correta?

2) Existe alguma forma de alterar a senha do usuário através da linha de comando? Tipo assim: passwd usuario senha (estou perguntando porque o comando smbpasswd tem opção que faz isto).
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

cavera37

é q assim o zenity é so pra interface grafica ta ligado  o resto dos comandos é shell script
e quanto a senha estar correta  é so  botar um if q nem eu fiz  o zenity so serve pra  aparece aquelas janelinhas   do ubuntu

clcampos

Citação de: cavera37 online 14 de Abril de 2007, 14:26
é q assim o zenity é so pra interface grafica ta ligado  o resto dos comandos é shell script
e quanto a senha estar correta  é so  botar um if q nem eu fiz  o zenity so serve pra  aparece aquelas janelinhas   do ubuntu

Trabalho com shell desde 1990, entendo bem o funcionamento. Para que você encerre o script por tempo de inatividade, ou então de continuidade à execução dos comandos seguintes o zenity teria que contar o tempo e encerrar, dando uma mensagem de erro (descoberta pela variável $?) de encerramento devido à inatividade. Como exemplo ao que estou te falando, se você estivesse usando o comando read para fazer a leitura das informações do usuário bastaria executar o comando com a opção -t que conseguiria exatamente o que deseja.

Quanto à minha dúvida você não deve ter entendido, já que não quero consistir uma senha qualquer, e sim a senha do usuário (que se encontra no arquivo /etc/shadow e criptografada). Portanto ou consigo criptografar a senha digitada pelo usuário (com a mesma rotina usada pelo sistema) e comparo com a que esta guardada no referido arquivo (já que é impossível fazer o caminho contrário... a partir da informação criptografada retornar ao dado original), ou então encontro um comando que faça isto para mim.

Apenas um if, como esta na sua aplicação, fazendo a comparação do conteúdo da variável com uma constante não me basta.
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

clcampos

#4
Na última resposta eu deveria ter dado um exemplo usando o read para sua rotina. Não vou me preocupar em fazer uma rotina pequena e bem estruturada, apenas tentarei ser didático.


#!/bin/bash


clear          # Limpando a tela
echo -e "Informe sua senha em até 5 minutos: \c"
read -t 300 senha                          # Le a senha a partir do teclado. A opção -t 300 encerra a execução do read após
                                           # 300 segundos (ou 5 minutos) de inatividade

if test $? -ne 0; then                     # Testa o encerramento anormal do comando read
   echo "Senha não informada no tempo permitido (5 minutos), o computador esta sendo desligado agora."
   shutdown now
elif test "$senha" = "e2g7w5f7"; then
             echo "a senha esta certa"
else
             echo "a senha esta errada e o computador vai ser desligado"
             shutdown now
fi
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

cavera37

bah cara  vlw mesmo  me ajudo mt mt  e quanto ao  seu problema  eu nao tenho muito conhevimento ainda em sh  mas eu axo q vc  deveria encriptar a senha  e comparar  com a do sistema... mas ai  o conhecimento  vai acima de mim ou entao fazer  do jeito porco usar um if com uma constante 


clcampos

#6
Lembrando aqui de uns scripts já feitos recomendo você a procurar outro comando que faça a interface com o usuário (sem ser o zenity). Falo isto porque fiz uso do dialog (sei que ele é feio se comparado ao zenity e para ambiente caracter) mas tem uma opção (--sleep segundos) que atenderia seu desejo.

Talvez então outro comando com ambiente mais "bonitinho" atenda você.
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

cavera37

é q na real  eu to usando  o zenity pq eu ouvi falsa q ele é  o oficial do gnome