Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: cavera37 em 13 de Abril de 2007, 19:19
-
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++
-
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).
-
é 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
-
é 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.
-
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
-
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
-
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ê.
-
é q na real eu to usando o zenity pq eu ouvi falsa q ele é o oficial do gnome