Script para interagir com as teclas do teclado [RESOLVIDO]

1. Script para interagir com as teclas do teclado [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 18/12/2014 - 12:17h

Olá pessoal!

Estou com uma dúvida(não sei de nada), estou querendo criar um script que leia os comando vindo teclado e identifique qual tecla foi pressionada.

Tipo:


#!/bin/bash

Echo "Digite uma tecla" && read tecla #(ou read -p "Digite uma tecla: " tecla)

if [ tecla == "A" ]
then

echo "A tecla pressionada foi "$tecla

fi


Este é só um exemplo, nem liguei pro formalismo do bash. Mas se alguém souber me ajudar ficarei muito grato.


  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 18/12/2014 - 17:42h

Amigo , não foi testado , mas deve funcionar :


#!/bin/bash

echo -ne "Digite uma letra : "
read -n1 -s letra # Se nao me engano , captura apenas uma tecla , sem precisar esperar o enter

# Usando If / Elif

if [ $letra = "a" ];then
echo "Voce digitou a letra '$letra'"

elif [ $letra = "b" ];then
echo "Voce digitou a letra '$letra'"

elif [ $letra = "c" ];then
echo "Voce digitou a letra '$letra'"

elif [ $letra = "d" ];then
echo "Voce digitou a letra '$letra'"

elif [ $letra = "e" ];then
echo "Voce digitou a letra '$letra'"

else
echo "Letra digitada nao foi reconhecida pelos if's , Desculpe D=" # Huehueuhehue , zoeira
fi

# Usando o case

case $letra in
"a")
echo "Voce digitou a letra '$letra'"
;;
"b")
echo "Voce digitou a letra '$letra'"
;;
"c")
echo "Voce digitou a letra '$letra'"
;;
"d")
echo "Voce digitou a letra '$letra'"
;;
"e")
echo "Voce digitou a letra '$letra'"
;;
*)
echo "Letra digitada nao foi reconhecida pelo case , Desculpe D="
;;
esac



Mostro 2 maneiras de fazer , usando o if e o case

Espero ter ajudado

Se ajudei , marque o tópico como resolvido e clique em "Melhor resposta"

[]'s

T+

3. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/12/2014 - 16:26h

Este exemplo pode ser reescrito para apenas:

read -p 'Digite uma tecla: ' tecla
echo 'A tecla pressionada foi "'$tecla'"'

Tenho quase certeza que as comparações que você quer fazer não são tão simples quanto as do exemplo que enviou :P



4. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 18/12/2014 - 17:19h

Vdd mas como citei foi só um exemplo! Eu queria um forma de fazer isso...


5. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 18/12/2014 - 17:59h


Muito obrigado Thihup, funcionou perfeitamente.
Mas tem como criar um script que não precisa usar um número limitado de letras? O script que você criou já quebra um galho, mas se criar um geral ficarei muito mais grato!


6. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/12/2014 - 18:01h

passosfil escreveu:

Vdd mas como citei foi só um exemplo! Eu queria um forma de fazer isso...


O problema é fazer as comparações? (Realmente não entendi)

Se for isto, pode-se usar qualquer uma das duas sintaxes a seguir:

1. if test "$tecla" = 'a'; then
...
fi

2. if [[ "$tecla" == 'a' ]]; then
...
fi




7. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 18/12/2014 - 18:01h

Mas tem como criar um script que não precisa usar um número limitado de letras? O script que você criou já quebra um galho, mas se criar um geral ficarei muito mais grato!


Como assim ?

[]'s

T+


8. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Sandro Marcell
smarcell

(usa Slackware)

Enviado em 18/12/2014 - 18:09h

Você pode tentar assim:


#!/bin/bash

# Põe o terminal em modo especial de interpretação
stty -echo -icanon min 0

while true; do
# Lê a tecla pressionada
read -s -r -n1 tecla
# Converte a string para seu valor ASCII
tecla=$(printf %d \'$tecla)

# Mostra o resultado
case "$tecla" in
97) echo 'Voce pressionou "a"';;
98) echo 'Voce pressionou "b"';;
99) echo 'Voce pressionou "c"';;
esac
done

# Restaura o terminal
stty sane



9. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 18/12/2014 - 18:17h

smarcell escreveu:

Você pode tentar assim:


#!/bin/bash

# Põe o terminal em modo especial de interpretação
stty -echo -icanon min 0

while true; do
# Lê a tecla pressionada
read -s -r -n1 tecla
# Converte a string para seu valor ASCII
tecla=$(printf %d \'$tecla)

# Mostra o resultado
case "$tecla" in
97) echo 'Voce pressionou "a"';;
98) echo 'Voce pressionou "b"';;
99) echo 'Voce pressionou "c"';;
esac
done

# Restaura o terminal
stty sane


Amigo , acho que ele quer fazer de alguma maneira que nao tenha que usar varios if/elif (pelo que eu entendi , mas estou esperando ele responder do jeito que ele quer , para facilitar-lo)

E se tentar executar vai ter que fechar o terminal , pois nao tem uma saida do loop!

[]'s

T+


10. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 18/12/2014 - 18:29h

Por outro lado , acho que desse modo pode funcionar :


#!/bin/bash

# Põe o terminal em modo especial de interpretação
stty -echo -icanon min 0

# Lê a tecla pressionada
read -s -r -n1 tecla

# Converte a string para seu valor ASCII
tecla=$(printf %d \'$tecla)

# Se for "maior ou igual" a tecla 'a' minuscula e for "menor ou igual" a tecla 'z' minuscula
if [ $tecla -ge 97 ] && [ $tecla -le 122 ];then
echo "Estou entre a letra 'a' e a letra 'z'"

# Se for "maior ou igual" a tecla 'A' maiuscula e for "menor ou igual" a tecla 'Z' maiuscula
elif [ $tecla -ge 65 ] && [ $tecla -le 90 ];then
echo "Estou entre a letra 'A' e a letra 'Z'"

# Se for "maior ou igual" ao numero '0' e for "menor ou igual" ao numero '9'
elif [ $tecla -ge 48 ] && [ $tecla -le 57 ];then
echo "Estou entre o numero '0' e o numero '9'"
# Tecnicamente "sou" o caractere ( por exemplo , o 9 ) '9' e não o numero 9

# Se não é um caractere especial
else
echo "Sou um caractere especial =D"
fi

# Restaura o terminal
stty sane


Espero ter ajudado

[]'s

T+

NOTA : Se quiser continuar usando os caracteres ASCII , verifique os numero (são os "DEC" da tabela ) , nessa tabela :
https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart



11. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 18/12/2014 - 18:51h

Thihup escreveu:

smarcell escreveu:

Você pode tentar assim:


#!/bin/bash

# Põe o terminal em modo especial de interpretação
stty -echo -icanon min 0

while true; do
# Lê a tecla pressionada
read -s -r -n1 tecla
# Converte a string para seu valor ASCII
tecla=$(printf %d \'$tecla)

# Mostra o resultado
case "$tecla" in
97) echo 'Voce pressionou "a"';;
98) echo 'Voce pressionou "b"';;
99) echo 'Voce pressionou "c"';;
esac
done

# Restaura o terminal
stty sane


Amigo , acho que ele quer fazer de alguma maneira que nao tenha que usar varios if/elif (pelo que eu entendi , mas estou esperando ele responder do jeito que ele quer , para facilitar-lo)

E se tentar executar vai ter que fechar o terminal , pois nao tem uma saida do loop!

[]'s

T+


Exatamente! Eu quero um script q não precise usar vários if/elif, quero algo que compare todas as teclas, isto é, se é que existe um tal!

Mas a contribuição de vocês está excelentíssima! Muito obigado a todos!



12. Re: Script para interagir com as teclas do teclado [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 18/12/2014 - 18:55h

Amigo , viu minha ultima "resposta" ?

Com 3 if/elif vc consegue verificar se é um numero , se é maiuscula ou é minuscula.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts