shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Configurando o ESC


From: Julio C. Neves
Subject: Re: [shell-script] Re: Configurando o ESC
Date: Mon, 14 May 2007 16:54:39 -0300

Cara,
isso que vc está fazendo não é uma boa em shell. O ideal seria vc ter um:

read -sn1 -p "Tecle algo para prosseguir ou <ESC> para sair: "
if [ "^[$" == "$(cat -vet <<< $REPLY)" ]
then
Avisar
fi
read -p "Informe IP: " IP
case ...

Para dar uma marretada e aproveitar o que vc fez (desaconselhável), faça:

echo -n "Informe o IP do cliente: "
read -sn1 -p "Informe o IP do cliente: " IP
if [ "^[$" == "$(cat -vet <<< $IP)" ]
then
Avisar
fi
echo -n $IP
read RestoIP
IP=$IP$RestoIP
case ...

O problema desta forma é que se o cara digitar o 1o. algarismo errado, ele
não poderá consertá-lo.

Abraços,
Julio
:wq


Em 14/05/07, xiss_break <address@hidden> escreveu:
>
>   --- Em address@hidden<shell-script%40yahoogrupos.com.br>,
> "Flavio Junior" <billpp@...>
> escreveu
> >
> > Veja bem, VAR foi o nome que EU usei pra variavel, não obrigatoriamente.
> > No seu caso a variavel é "ip"
> >
> > Vou tentar adaptar seu script aqui no corpo do e-mail:
> >
> > echo -n "Informe o IP do cliente: "
> > read -n1 -s IP
> > if [ "^[$" == "$(cat -vet <<< $IP)" ]
> > then
> > Avisar
> > fi
> > case $IP in
> > [a-z] | [A-Z] ) echo "Formato ip Invalido!"; sleep 1; DelAviso
> > ;;
> >
> > [0-9]*\.[0-9]*\.[0-9]*\.[0-9][0-9][0-9] )
> > x=1
> > while [ "$x" -le 4 ];
> > do
> > Q1=`echo "${IP}" | cut -f"${x}" -d.`;
> > if [ "$Q1" -gt 255 ];
> > then
> > echo "O valor $Q1 não é válido!";
> > sleep 1
> > DelAviso
> > fi;
> > x=$((x+1));
> > done;
> > ;;
> >
> > * ) echo "Formato ip invalido!"; sleep 1; DelAviso
> > esac
> >
> > ARQ=/usr/local/squid/etc/aviso.txt
> > if [ ! -f "$ARQ" ]
> > then
> > touch /usr/local/squid/etc/aviso.txt
> > else
> > if [ ! -w "$ARQ" ]
> > then
> > echo "Arquivo sem Permissão para gravar!"
> > else
> > sed -e '$a\' -e "${IP}" "${ARQ}" > /tmp/arq
> > mv /tmp/arq "${ARQ}"
> > fi
> > sleep 1
> > Avisar
> > fi
> > }
> >
> > Testa ai..
> >
> > Flavio do Carmo Junior
> >
> > On 5/14/07, xiss_break <xiss_break@...> wrote:
> > >
> > > --- Em
> address@hidden <shell-script%40yahoogrupos.com.br>
> <shell-script%40yahoogrupos.com.br>,
> > > "Flavio Junior" <billpp@>
> > > escreveu
> > > >
> > > > A dica não é minha, a algum tempo atras alguem respondeu essa mesma
> > > duvida
> > > > aqui na lista
> > > >
> > > > a ideia é a seguinte:
> > > > -bash-3.1$ read -n1 -s VAR
> > > > <ESC>
> > > > -bash-3.1$ if [ "^[$" == "$(cat -vet <<< $VAR)" ]; then echo APERTOU
> > > ESC;
> > > > else echo BALH BALH BLAH; fi
> > > > APERTOU ESC
> > > > -bash-3.1$
> > > >
> > > > Pra ficar mais claro, quando voce atribui o valor de <ESC> (apertar
> > > a tecla
> > > > ESC) a uma variavel, o caracter q ela pega é ^[$, com o cat -vet
> a gente
> > > > consegue ver isso e comparar com o literal ^[$ q escrevemos, se
> > > forem iguais
> > > > então ele apertou esc.
> > > >
> > > > Agora pro teu problema é só fazer um entra lido sai lido que
> resolve.
> > > >
> > > > Sorte,
> > > >
> > > >
> > > > Flavio do Carmo Junior
> > > >
> > > >
> > > > On 5/14/07, xiss_break <xiss_break@> wrote:
> > > > >
> > > > > Olá pessoal,
> > > > >
> > > > > Estou tentando fazer um programa em shell, sendo este o meu
> primeiro
> > > > > programa. Esta funcionando de forma perfeita, mas algumas
> > > > > funcionalidades estão me tirando do serio, a principal delas é a
> > > seguinte:
> > > > >
> > > > > Tem uma tela que o usuario tem de informar um numero de
> codigo, mas
> > > > > gostaria que quando o usuario em uma possivel desistência, pudesse
> > > > > usar o ESC para retornar a tela anterior.
> > > > >
> > > > > Isso é possivel?
> > > > >
> > > > > Grato a todos!
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > >
> > > Olá Flavio..
> > >
> > > Agradeço imensamente sua resposta.
> > > Coloquei de um geito muito tosco no script apenas para testar se
> > > funcionava de fato. Mas agora não estou conseguindo inserir este
> > > controle no contexto do script ja existente. Veja abaixo o que tenho.
> > >
> > > echo -n "Informe o IP do cliente: "
> > > read -n1 -s VAR ip
> > > if [ "^[$" == "$(cat -vet <<< $VAR)" ]
> > > then
> > > Avisar
> > > fi
> > > case $ip in
> > > [a-z] | [A-Z] ) echo "Formato ip Invalido!"; sleep 1; DelAviso
> > > ;;
> > >
> > > [0-9]*\.[0-9]*\.[0-9]*\.[0-9][0-9][0-9] )
> > > x=1
> > > while [ "$x" -le 4 ];
> > > do
> > > Q1=`echo "${ip}" | cut -f"${x}" -d.`;
> > > if [ "$Q1" -gt 255 ];
> > > then
> > > echo "O valor $Q1 não é válido!";
> > > sleep 1
> > > DelAviso
> > > fi;
> > > x=$((x+1));
> > > done;
> > > ;;
> > >
> > > * ) echo "Formato ip invalido!"; sleep 1; DelAviso
> > > esac
> > >
> > > ARQ=/usr/local/squid/etc/aviso.txt
> > > if [ ! -f "$ARQ" ]
> > > then
> > > touch /usr/local/squid/etc/aviso.txt
> > > else
> > > if [ ! -w "$ARQ" ]
> > > then
> > > echo "Arquivo sem Permissão para gravar!"
> > > else
> > > sed -e '$a\' -e "${ip}" "${ARQ}" > /tmp/arq
> > > mv /tmp/arq "${ARQ}"
> > > fi
> > > sleep 1
> > > Avisar
> > > fi
> > > }
> > >
> > > Veja que inserir sua sugestao na interacao do read, mas assim ele fica
> > > com alguns bugs...preciso encontrar um geito de inseri-lo nessa
> > > intreção com o restante do script.
> > >
> > > Agradeço a todos que ajudarem.
> > >
> > >
> > >
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
> Olá Flavio.
>
> Tentei usar conforme sua modificação, funciona, mas tem um problema
> quando eu acesso a primeira vez esse menu o ESC funciona, mas apos
> fazer o primeiro cadastro de ip ele não funciona mais...quando clico
> no ESC ele escreve ^[ no prompt.
>
> Acho que tenho de fazer mais modificaçoes no script, mas não estou
> encontrando o ponto de partida.
>
> Abraços
>
>  
>



-- 
Abraços,
Julio
http://www.julioneves.com - Um livro sobre Bash completo e on-line
:wq


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]